GDI绘制叶形线和蝴蝶结

来源:互联网 发布:杭州企业网站排名优化 编辑:程序博客网 时间:2024/04/27 22:47
具有一定规律的曲线可以用数学表达式来模拟,那么在计算机世界中这些图形是怎么生成的,下面来看一下一些简单图形的生成方法,蝴蝶线和星形线。

蝴蝶线、代码如下:

void OnDrawRose(CDC* pDc){int d,k,x1,x2,y1,y2;float pi,a,e;CPen pen;pen.CreatePen(PS_SOLID,1,RGB(0xff,0,0));CPen *pOldPen = pDc->SelectObject(&pen);pi = 3.1415926;d = 80;for (a = 0; a<=2 * pi; a+= pi/360){e = d * (1+0.25*sin(4*a));e = e * (1 + sin(8*a));x1 = int(320+e*cos(a));x2 = int(320+e*cos(a + pi/8));y1 = int(200+e*sin(a));y2 = int(200+e*sin(a + pi/8));pDc->MoveTo(x1,y1);pDc->LineTo(x2,y2);}}


星形线的绘制代码如下:

void OnDrawLeaf(CDC* pDc){CPen pen;pen.CreatePen(PS_SOLID,1,RGB(0,0,0xff));CPen *pOldPen = pDc->SelectObject(&pen);int a,n,cx,cy,gx,gy,flag,k;double r,p,th,x,y,pi;a = 160;n = 2;pi = 3.1415926;cx = 700;cy = 500;flag = 0; k = 200;for (p = 1; p >= 0.2; p-=0.2){for (th = 0; th <= 2*pi+0.1; th += pi/k){r = fabs(a*cos(n*th)*p);x = r*cos(th);y = r*sin(th);gx = int(cx+x);gy = int(cy+y);if (flag == 0){pDc->MoveTo(gx,gy);}flag = 1;pDc->LineTo(gx,gy);}flag = 0;}pDc->SelectObject(pOldPen);}

生产成的图形如下:

呵呵,效果还可以吧

 

原创粉丝点击