计算机图形学 实验 画圆法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
ReleaseDC(pdc);
}
四、实验心得:
八分之一画圆法中,第一段代码的位置要放对,是放在“CMy0View::CMy0View()”的前面,一定要注意,不能放到它的后面去,否则会出现错误。
写代码时要注意大小写的使用,例如:第一段代码中定义为“MidpointCircle”,则第二段代码中必须对应的为“MidpointCircle”,里面的大写字母一定不能为小写。
// CMy9View message handlers
void CMy9View::On1()
{
// TODO: Add your command handler code here
CDC*pdc=GetDC();
int x0=400,y0=200,a=120,b=60,x,y,color=(RGB(0,0,255));
找到和参考点对称的另外几个点,再在中点绘制圆弧的定义函数中调用,绘制另外的几段圆弧。
三、实验内容:
八分之一画圆法:
/////////////////////////////////////////////////////////////////////////////
// CMy4View construction/destruction
pdc->SetPixel(x0-y,y0-x,color);
pdc->SetPixel(x0+y,y0+x,color);
pdc->SetPixel(x0-y,y0+x,color);
}
}
CMy0View::CMy0View()
{
// TODO: add construction code here
double d1,d2;
x=0;y=b;
d1=b*b+a*a*(-b+0.25);
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
若d>=0,则应取P2为下一象素,而且下一象素的判别式为
第一个象素是(0,R),判别式d的初始值为
中点画圆法绘出的只是一个完整圆弧的八分之一,然后根据圆良好的对称性,绘出和参考点对称的另外七个点,再用中点画圆法,以生成的这几个点为基础,绘出其它七段圆弧,构成一个完整的园。这七个点的坐标分别为:(x0+x,y0-y,c),(x0+x,y0+y,c),(x0-x,y0-y,c),(x0-x,y0+y,c),(x0-y,y0-x,c),(x0-y,y0+x,c),(x0+y,y0+x,c),(x0+y,y0-x,c)。
int x0,y0;
x0=138,y0=138;
int r=100;
int color=RGB(255,0,255);
CClientDC dc(this);
MidpointCircle(&dc,x0,y0,r,color);
}
中心画椭圆法:
/////////////////////////////////////////////////////////////////////////////
XXXXXXXX
实验名称画圆法
实验时间年月日
专业姓名学号
预习操作座位号
教师签名总评
一、实验目的:
1.了解画圆法的基本思想;
2.掌握画圆法的基本步骤。
二、实验原理:
1.中点画圆法
中点画圆法是利用圆心在坐标原点 圆的方程 ,将每个像素的中点坐标代入圆的方程得到d,再通过d的值来确定中点与圆的位置。
若d<0,则取P1为下一象素,而且再下一象素的判别式为
x++;y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
}
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while(y>0)
{
if百度文库d2<=0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
}
else
{
y--;
d+=2*(x-y)+5;
}
pdc->SetPixel(x0+x,y0-y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+y,y0-x,color);
}
/////////////////////////////////////////////////////////////////////////////
// CMy4View message handlers
void CMy4View::On1()
{
// TODO: Add your command handler code here
voidMidpointCircle(CDC *pdc,int x0,int y0,int r,int color)
{
int x,y;
float d;
x=0;
y=r;
d=1.25-r;
pdc->SetPixel(x0+x,y0-y,color);
while(x<=y)
{
x++;
if(d<0)
{
d+=2*x+3;
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<=0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=b*b*(2*x+3)+a*a*(-2*y+2);
x++;y--;
}
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);
ReleaseDC(pdc);
}
四、实验心得:
八分之一画圆法中,第一段代码的位置要放对,是放在“CMy0View::CMy0View()”的前面,一定要注意,不能放到它的后面去,否则会出现错误。
写代码时要注意大小写的使用,例如:第一段代码中定义为“MidpointCircle”,则第二段代码中必须对应的为“MidpointCircle”,里面的大写字母一定不能为小写。
// CMy9View message handlers
void CMy9View::On1()
{
// TODO: Add your command handler code here
CDC*pdc=GetDC();
int x0=400,y0=200,a=120,b=60,x,y,color=(RGB(0,0,255));
找到和参考点对称的另外几个点,再在中点绘制圆弧的定义函数中调用,绘制另外的几段圆弧。
三、实验内容:
八分之一画圆法:
/////////////////////////////////////////////////////////////////////////////
// CMy4View construction/destruction
pdc->SetPixel(x0-y,y0-x,color);
pdc->SetPixel(x0+y,y0+x,color);
pdc->SetPixel(x0-y,y0+x,color);
}
}
CMy0View::CMy0View()
{
// TODO: add construction code here
double d1,d2;
x=0;y=b;
d1=b*b+a*a*(-b+0.25);
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
若d>=0,则应取P2为下一象素,而且下一象素的判别式为
第一个象素是(0,R),判别式d的初始值为
中点画圆法绘出的只是一个完整圆弧的八分之一,然后根据圆良好的对称性,绘出和参考点对称的另外七个点,再用中点画圆法,以生成的这几个点为基础,绘出其它七段圆弧,构成一个完整的园。这七个点的坐标分别为:(x0+x,y0-y,c),(x0+x,y0+y,c),(x0-x,y0-y,c),(x0-x,y0+y,c),(x0-y,y0-x,c),(x0-y,y0+x,c),(x0+y,y0+x,c),(x0+y,y0-x,c)。
int x0,y0;
x0=138,y0=138;
int r=100;
int color=RGB(255,0,255);
CClientDC dc(this);
MidpointCircle(&dc,x0,y0,r,color);
}
中心画椭圆法:
/////////////////////////////////////////////////////////////////////////////
XXXXXXXX
实验名称画圆法
实验时间年月日
专业姓名学号
预习操作座位号
教师签名总评
一、实验目的:
1.了解画圆法的基本思想;
2.掌握画圆法的基本步骤。
二、实验原理:
1.中点画圆法
中点画圆法是利用圆心在坐标原点 圆的方程 ,将每个像素的中点坐标代入圆的方程得到d,再通过d的值来确定中点与圆的位置。
若d<0,则取P1为下一象素,而且再下一象素的判别式为
x++;y--;
}
else
{
d2+=a*a*(-2*y+3);
y--;
}
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+x,y0-y,color);
}
d2=b*b*(x+0.5)*(x+0.5)+a*a*(y-1)*(y-1)-a*a*b*b;
while(y>0)
{
if百度文库d2<=0)
{
d2+=b*b*(2*x+2)+a*a*(-2*y+3);
}
else
{
y--;
d+=2*(x-y)+5;
}
pdc->SetPixel(x0+x,y0-y,color);
pdc->SetPixel(x0-x,y0-y,color);
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0+y,color);
pdc->SetPixel(x0+y,y0-x,color);
}
/////////////////////////////////////////////////////////////////////////////
// CMy4View message handlers
void CMy4View::On1()
{
// TODO: Add your command handler code here
voidMidpointCircle(CDC *pdc,int x0,int y0,int r,int color)
{
int x,y;
float d;
x=0;
y=r;
d=1.25-r;
pdc->SetPixel(x0+x,y0-y,color);
while(x<=y)
{
x++;
if(d<0)
{
d+=2*x+3;
while(b*b*(x+1)<a*a*(y-0.5))
{
if(d1<=0)
{
d1+=b*b*(2*x+3);
x++;
}
else
{
d1+=b*b*(2*x+3)+a*a*(-2*y+2);
x++;y--;
}
pdc->SetPixel(x0+x,y0+y,color);
pdc->SetPixel(x0-x,y0-y,color);