MFC绘制金刚石图案
参考孔令德老师的《计算几何算法与实现》
将半径为R的圆进行N等分后,使用直线将等分点相连得到的图案称为金刚石图案
编程实现,在OnDraw函数中添加代码
定义四舍五入:
#define ROUND(h) int(h+0.5)
// TODO: 在此处为本机数据添加绘制代码
CRect rect;
GetClientRect(&rect);//获得客户区大小
pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式
pDC->SetWindowExt(rect.Width(),rect.Height());//设置窗口范围
pDC->SetViewportExt(rect.Width(),-rect.Height());//设置视区范围,y向上为正方向
pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//设置坐标系原点
rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);//校正客户区矩形
int r=300,n=10;//绘制金刚石图案
CPoint P[10];
double Theta=2*PI/n;//间距角
double Alpha=PI/10;//起始角
for(int i=0;i<n;i++)//计算节点
{
P[i].x=ROUND(r*cos(i*Theta+Alpha));
P[i].y=ROUND(r*sin(i*Theta+Alpha));
}
for(int i=0;i<n-1;i++)//节点数
{
for(int j=i+1;j<n;j++)//连接各节点
{
pDC->MoveTo(P[i]);
pDC->LineTo(P[j]);
}
}
绘制结果: