当前位置:文档之家› 计算机图形学实验一

计算机图形学实验一

计算机图形学实验一
计算机图形学实验一

太原工业学院

CP2 p,t;

CRGB clr=CRGB(0.9,0.4,0.8);//像素点

if(fabs(P0.x-P1.x)<1e-6)//绘制垂线

{

if(P0.y>P1.y)//交换顶点,使得起始点低于终点

{

t=P0;P0=P1;P1=t;

}

for(p=P0;p.y

{

pDC->SetPixelV(Round(p.x),Round(p.y),RGB(clr.red*255,clr.green*255 ,clr.blue*255));

}

}

else

{

double k,d;

k=(P1.y-P0.y)/(P1.x-P0.x);

if(k>1.0)//绘制k>1

{

if(P0.y>P1.y)

{

t=P0;P0=P1;P1=t;

}

d=1-0.5*k;

for(p=P0;p.y

{

pDC->SetPixelV(Round(p.x),Round(p.y),RGB(k*clr.red*255,k*clr.green *255,k*clr.blue*255));

if(d>=0)

{

p.x++;

d+=1-k;

}

else

d+=1;

}

}

if(0.0<=k && k<=1.0)//绘制0<=k<=1

{

if(P0.x>P1.x)

{

t=P0;P0=P1;P1=t;

}

d=0.5-k;

for(p=P0;p.x

{

pDC->SetPixelV(Round(p.x),Round(p.y),RGB(k*clr.red*255,k*clr.green

*255,k*clr.blue*255));

if(d<0)

{

p.y++;

d+=1-k;

}

else

d-=k;

}

}

if(k>=-1.0 && k<0.0)//绘制-1<=k<0

{

if(P0.x>P1.x)

{

t=P0;P0=P1;P1=t;

}

d=-0.5-k;

for(p=P0;p.x

{

pDC->SetPixelV(Round(p.x),Round(p.y),RGB(k*clr.red*255,k*clr.green *255,k*clr.blue*255));

if(d>0)

{

p.y--;

d-=1+k;

}

else

d-=k;

}

}

if(k<-1.0)//绘制k<-1

{

if(P0.y

{

t=P0;P0=P1;P1=t;

}

d=-1-0.5*k;

for(p=P0;p.y>P1.y;p.y--)

{

pDC->SetPixelV(Round(p.x),Round(p.y),RGB(k*clr.red*255,k*clr.green *255,k*clr.blue*255));

if(d<0)

{

p.x++;

d-=1+k;

}

else

d-=1;

}

}

}

P0=p1;

};

(2)交互代码(部分):

按下鼠标左键绘图

void CTestView::OnDrawpic()

{

// TODO: Add your command handler code here

MessageBox(CString("请按下鼠标左键绘图!"),CString("提示"),MB_ICONEXCLAMATION|MB_OK);

RedrawWindow();

}

运行结果:

实验拓展:可以实现直线的平移、缩放、旋转、对称变换

void CTestView::OnTleft()

{

// TODO: 在此添加命令处理程序代码trans.Translate(-10,0);

Invalidate(FALSE);

}

void CTestView::OnTright()

{

// TODO: 在此添加命令处理程序代码CDC *pDC=GetDC();

trans.Translate(10,0);

DoubleBuffer(pDC);

ReleaseDC(pDC);

}

void CTestView::OnSincrease()

{

// TODO: 在此添加命令处理程序代码trans.Scale(2,2);

Invalidate(FALSE);

}

void CTestView::OnSdecrease()

{

// TODO: 在此添加命令处理程序代码trans.Scale(0.5,0.5);

Invalidate(FALSE);

}

相关主题
文本预览
相关文档 最新文档