具有一定规律的曲线可以用数学表达式来模拟,那么在计算机世界中这些图形是怎么生成的,下面来看一下一些简单图形的生成方法,蝴蝶线和星形线。
蝴蝶线、代码如下:
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); }
生产成的图形如下:
呵呵,效果还可以吧