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