扇形绘制(超低效率)
来源:互联网 发布:python pip安装 编辑:程序博客网 时间:2024/05/16 06:21
#include <graphics.h> // 就是需要引用这个图形库
#include <iostream>
#include <math.h>
using namespace std;
inline void point(double x, double y)
{
//采用DDA算法 画点
putpixel(static_cast<int>(x), static_cast<int>(y + 0.5),RED);
}
//自定义DDA算法画线
void line_1(int x1, int y1, int x2, int y2)
{
//检查斜率为0的情况
if (x2 - x1 == 0){
for (int i = min(y1, y2); i <= max(y1, y2); i++)
{
putpixel(x1, i, RED);
}
return;
}
if (y2 - y1 == 0){
for (int i = min(x1, x2); i < max(x1, x2); i++)
{
putpixel(i, y1, RED);
}
return;
}
//先进行强制转换
double k = static_cast<double>(y2 - y1) / (x2 - x1);
double k2 = static_cast<double>(x2 - x1) / (y2 - y1);
if (abs(k) < 1)
{
if (x1 > x2)
{
std::swap(y1, y2);
std::swap(x1, x2);
}
double y3 = y1;
for (int i = x1; i <=x2; i++){
//DDA算法
putpixel(i, static_cast<int>(y3 + 0.5), GREEN);
y3 += k;
}
return;
}
if (y1 > y2)
{
std::swap(y1, y2);
std::swap(x1, x2);
}
double x3 = x1;
for (int i =y1;i<y2; i++)
{
//DDA算法
putpixel(static_cast<int>(x3 + 0.5), i, GREEN);
x3 += k2;
}
}
void shan_xing(int r, double angle)
{
double angle0 = 0;
//设置扇形的起边角为0
double angle1 = angle + angle0;
//扇形的圆弧两端坐标
double x0 = r*cos(angle0), y0 = r*sin(angle0);
double x1 = r*cos(angle1), y1 = r*sin(angle1);
line_1(0, 0, x0, y0);
line_1(0, 0, x1, y1);
int dx = x0 - x1;
const int R = r*r;
//如果所画角度超过3.1415926 先进行下一步
if (y1 < 0)
{
int temp_x = x1;
for (int i = -r; i <= temp_x; i++)
if (i*i < R / 2) //以x为增量
point(i, -sqrt(R - i*i));
else //以y为增量
for (int j = -sqrt(R - i*i); i*i > R / 2 && i <= temp_x; j += i / abs(i))
{
i = i / abs(i)*sqrt(R - j*j);
point(i, j);
}
x1 = -r, y1 = 0;
}
for (int i = x0; i >= x1; i--)
if (i*i < R / 2)//以x为增量
point(i, sqrt(R - i*i));
else //以y为增量
for (int j = sqrt(R - i*i); i*i > R / 2&&i>x1; j += i / abs(i))
{
i = i / abs(i)*sqrt(R - j*j);
point(i, j);
}
}
int main()
{
initgraph(600, 600); // 设置画布大小
setorigin(300,300); //设置坐标原点为(300,300)
//画扇形
shan_xing(100, 5);
system("pause");
closegraph(); // 关闭图形界面
}
#include <iostream>
#include <math.h>
using namespace std;
inline void point(double x, double y)
{
//采用DDA算法 画点
putpixel(static_cast<int>(x), static_cast<int>(y + 0.5),RED);
}
//自定义DDA算法画线
void line_1(int x1, int y1, int x2, int y2)
{
//检查斜率为0的情况
if (x2 - x1 == 0){
for (int i = min(y1, y2); i <= max(y1, y2); i++)
{
putpixel(x1, i, RED);
}
return;
}
if (y2 - y1 == 0){
for (int i = min(x1, x2); i < max(x1, x2); i++)
{
putpixel(i, y1, RED);
}
return;
}
//先进行强制转换
double k = static_cast<double>(y2 - y1) / (x2 - x1);
double k2 = static_cast<double>(x2 - x1) / (y2 - y1);
if (abs(k) < 1)
{
if (x1 > x2)
{
std::swap(y1, y2);
std::swap(x1, x2);
}
double y3 = y1;
for (int i = x1; i <=x2; i++){
//DDA算法
putpixel(i, static_cast<int>(y3 + 0.5), GREEN);
y3 += k;
}
return;
}
if (y1 > y2)
{
std::swap(y1, y2);
std::swap(x1, x2);
}
double x3 = x1;
for (int i =y1;i<y2; i++)
{
//DDA算法
putpixel(static_cast<int>(x3 + 0.5), i, GREEN);
x3 += k2;
}
}
void shan_xing(int r, double angle)
{
double angle0 = 0;
//设置扇形的起边角为0
double angle1 = angle + angle0;
//扇形的圆弧两端坐标
double x0 = r*cos(angle0), y0 = r*sin(angle0);
double x1 = r*cos(angle1), y1 = r*sin(angle1);
line_1(0, 0, x0, y0);
line_1(0, 0, x1, y1);
int dx = x0 - x1;
const int R = r*r;
//如果所画角度超过3.1415926 先进行下一步
if (y1 < 0)
{
int temp_x = x1;
for (int i = -r; i <= temp_x; i++)
if (i*i < R / 2) //以x为增量
point(i, -sqrt(R - i*i));
else //以y为增量
for (int j = -sqrt(R - i*i); i*i > R / 2 && i <= temp_x; j += i / abs(i))
{
i = i / abs(i)*sqrt(R - j*j);
point(i, j);
}
x1 = -r, y1 = 0;
}
for (int i = x0; i >= x1; i--)
if (i*i < R / 2)//以x为增量
point(i, sqrt(R - i*i));
else //以y为增量
for (int j = sqrt(R - i*i); i*i > R / 2&&i>x1; j += i / abs(i))
{
i = i / abs(i)*sqrt(R - j*j);
point(i, j);
}
}
int main()
{
initgraph(600, 600); // 设置画布大小
setorigin(300,300); //设置坐标原点为(300,300)
//画扇形
shan_xing(100, 5);
system("pause");
closegraph(); // 关闭图形界面
}
0 0
- 扇形绘制(超低效率)
- 绘制扇形
- 高速扇形绘制程序
- AS3绘制扇形
- AS3 扇形绘制
- Flex4绘制扇形
- UIBezierPath绘制扇形图
- iOS(扇形的绘制)
- css 绘制圆形 扇形
- [Unity]绘制扇形图形
- 自定义AS3绘制扇形函数
- 使用canvas绘制扇形图
- cocos2d-x中绘制扇形
- vc在窗体上绘制扇形
- 学习笔记-百度地图绘制扇形
- silverlight 中绘制扇形(前台+后台)
- Silverlight 中绘制扇形(前台+后台)
- 【VC++】003绘制连续线条-扇形线条
- 【PMP】Head First PMP 学习笔记 第十章 沟通管理
- win7下硬盘安装CentOs7
- 2017最新v3学院内部FPGA全套教学视频,要的跟帖留邮箱!
- Azure Messaging-ServiceBus Messaging消息队列技术系列4-复杂对象消息是否需要支持序列化和消息持久化
- 蓝桥杯-寒假作业
- 扇形绘制(超低效率)
- 实体关联映射——权限系统
- nyoj325-zb的生日
- 搞定了困扰很久的win10 allapps 内快捷方式丢失的问题!
- Linux centos 学习笔记 DAY1 文件属性与权限
- 凯撒密码源码
- Android 完整反编译第二期:10分钟教会你使用反编译!
- ubunt14.04安装zabbix3.2
- 使用AndroidStudio打包的那些事