太原工业学院
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); }