正多边形画法,圆的内接,外切正多边形画法。
文章首发在oschina这个不是首发,但作者都是我一个人。这个是在上一篇费氏数列螺线画法的基础上改的所以注释有些奇怪,大家不要见怪哈

void CMyDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CDC *pDC;
pDC = this ->GetDC();
int iList[100];
iList[0]=1; //费氏数列初始的两个元素
iList[1]=1;
int i;
int ix; //横坐标的整数点
int iy; //纵坐标的整数点
double dR=200; //半径
int iStart=300;
int iNum=9; //画几边形;10个圆就是,10-1边形
double dx,dy;
double dPi = 3.1415926535; //π,2π是一个圆周
double dPercision = 0.01; //精度0.01弧度 数值小,越像多边形
double da=0; //角度
dx = cos (da)*dR; //取得XY坐标,cos和sin呼唤,可以改变旋转方向,目前是顺时针
dy = sin (da)*dR;
ix = int (dx); //取整
iy = int (dy);
pDC->MoveTo(iStart+ix, iStart+iy);
for (da=0; da<=2*dPi; da+=dPercision) //画圆
{
dx = cos (da)*dR;
dy = sin (da)*dR;
ix = int (dx);
iy = int (dy);
pDC->LineTo(iStart+ix, iStart+iy);
}
i=0;
dPercision = 2*dPi/9.00001; //画内接九边形
for (da=0; da<=2*dPi; da+=dPercision)
{
dx = cos (da)*dR;
dy = sin (da)*dR;
ix = int (dx);
iy = int (dy);
iList[i++]=ix;
iList[i++]=iy;
pDC->LineTo(iStart+ix, iStart+iy);
pDC->LineTo(iStart, iStart);
pDC->LineTo(iStart+ix, iStart+iy);
}
i=0;
dPercision = 2*dPi/9.00001; //画外接九边形
dR=dR/ sin (dPi-dPercision/2-dPi/2); //(半径变化)
for (da=0; da<=2*dPi; da+=dPercision)
{
dx = cos (da)*dR;
dy = sin (da)*dR;
ix = int (dx);
iy = int (dy);
iList[i++]=ix;
iList[i++]=iy;
pDC->LineTo(iStart+ix, iStart+iy);
pDC->LineTo(iStart, iStart);
pDC->LineTo(iStart+ix, iStart+iy);
}
pDC->SetTextColor(RGB(255, 0, 0));
i=0;
dPercision = 2*dPi/9.00001; //画外接九边形
//dR=dR/sin(dPi-dPercision/2-dPi/2);
for (da=dPercision/2; da<=2*dPi+dPercision/2; da+=dPercision) //转动半顶角个角
{
dx = cos (da)*dR;
dy = sin (da)*dR;
ix = int (dx);
iy = int (dy);
iList[i++]=ix;
iList[i++]=iy;
pDC->LineTo(iStart+ix, iStart+iy);
pDC->LineTo(iStart, iStart);
pDC->LineTo(iStart+ix, iStart+iy);
}
好吧,这个像是车轮了。。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
