计算机图形学第三章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.
voidLine_Midpoint(int x1, int y1, int x2, int y2, int color) {
int x = x1, y = y1;
int a = y1 - y2, b = x2 - x1;
int cx = (b >= 0 ? 1 : (b = -b, -1));
int cy = (a <= 0 ? 1 : (a = -a, -1));
putpixel(x, y, color);
int d, d1, d2;
if (-a <= b) // 斜率绝对值 <= 1
{
d = 2 * a + b;
d1 = 2 * a;
d2 = 2 * (a + b);
while(x != x2)
{
if (d < 0)
y += cy, d += d2;
else
d += d1;
x += cx;
putpixel(x, y, color);
}
}
else // 斜率绝对值 > 1
{
d = 2 * b + a;
d1 = 2 * b;
d2 = 2 * (a + b);
while(y != y2)
{
if(d < 0)
d += d1;
else
x += cx, d += d2;
y += cy;
putpixel(x, y, color);
}
}
}
7
void Line_Midpoint(int x1, int y1, int x2, int y2, int color,
int flag)
{
intx,y;
if(flag==0)
{
x0=point.x;
y0=point.y;
flag=1;
}
else
{
flag=0;
x1=point.x;
y1=point.y;
a=y0-y1;
b=x1-x0;
d=2*a+b;
d1=2*a,
d2=2* (a+b);
x=x0, y=y0;
pDC->SetPixel(x, y+2, RGB(0,0,255));
pDC->SetPixel(x, y+1, RGB(0,0,255));
pDC->SetPixel(x, y, RGB(0,0,255));
pDC->SetPixel(x, y-1, RGB(0,0,255));
pDC->SetPixel(x, y-2, RGB(0,0,255));
while (x { if (d<0) {x++; y++; d+=d2; } else {x++, d+=d1;} pDC->SetPixel(x, y+2, RGB(0,0,255)); pDC->SetPixel(x, y+1, RGB(0,0,255)); pDC->SetPixel(x, y, RGB(0,0,255)); pDC->SetPixel(x, y-1, RGB(0,0,255)); pDC->SetPixel(x, y-2, RGB(0,0,255)); } /* while */ }