计算机图形学正负法画圆
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机图形学试验报告(六)
试验名称:利用正负法画圆
专业:地理信息系统班级:2011级1班学号:********姓名:日期:2013年
一、试验内容
1、利用中点法思想编写函数;
2、利用算法生成圆;
3、完成属性设置和增加交互功能;
二、试验目的
通过上机操作,编写中点法生成圆,理解重点算法的生成原理,并实现简单的交互功能。
三、试验原理
中点法生成圆,是利用函数曲线的交点与两个像素的中点的位置关系,来确定下一像素点的选取,决策变量d的初始值为d=d=5.0/4-r; 当点(x,y)在圆内时,d<0;当点在圆外时,d>0;当点在圆上时,d=0。根据判别变量F的正负,可设定x,y的移动方向,然后利用映射变换生成整个圆。
四、程序设计流程
五、试验程序
(1)
#include “graphics.h”
#include “conio.h”
void MidpointCircle(x0,y0,r,color)
{
int x,y;
float d;
x=0;
y=r;
d=5.0/4-r; //设置初始变量d
while(x<=y) { //结束判断
putdot(x0,y0,x,y,color);
if(d<0)
d+=x*2.0+3; //更新判别变量
else {
d+=2.0*(x-y)+5;
y--; //点在圆外,向下走一个单位}
x++;
}
}
putdot(x0,y0,x,y,color)
{
putpixel(x0+x,y0+y,color);
putpixel(x0+x,y0-y,color);
putpixel(x0-x,y0+y,color);
putpixel(x0-x,y0-y,color);
putpixel(x0+y,y0+x,color);
putpixel(x0+y,y0-x,color);
putpixel(x0-y,y0+x,color);
putpixel(x0-y,y0-x,color);
}
void main()
{
int x0,y0,r,color;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"c:\\TC20\\BGI");
setbkcolor(1);
printf("please input:x0,y0,r,color:\n");
scanf("%d,%d,%d,%d",&x0,&y0,&r,&color);
MidpointCircle(x0,y0,r,color);
getch();
closegraph();
}
六、试验结果
以70为半径,(100,100)为圆心坐标画出一颜色为黄色的圆。
七、试验总结
这次上机实验,主要是练习利用中点法生成圆,并理解中点法生成圆的原理,在生成圆的不同算法的里,都需要找到一个判别变量,判断现在的点是在圆内还是圆,然后在确定x,y方向是否增加,再根据坐标变换画出整个圆。