正多边形和心脏线生成算法
2021-02-28张博


摘要:对于正多边形和心脏线图形的生成,本文给出了新的递推公式,并以该公式为基础构造了正多边形和心脏线的生成算法;该算法在等分角度的设定下,计算正多边形每对顶点需要2次乘法运算,计算心脏线每对点需要4次乘法运算,算法避免了大量的三角函数运算因而效率较高。用VB编写程序对算法进行了验证,算法具有一定的实用价值。
关键词:正多边形;心脏线;构造;算法;递推公式
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2021)35-0127-02
1 正多边形算法设计
1.1 正多边形算法递推公式的构造
r为正多边形外接圆半径,圆心与直角坐标系下的原点[o]重合。假设把圆周角[m]等份,每份对应的角度[θ=2π/m]。沿[x]轴的正方向逆时针方向顺次在圆上取点,相邻两点圆弧对应的圆心角为[θ]。初始时,取[x0=0,y0=r;] [x1=rcos(θ),] [y1=rsin(θ)]。
[xn=rcos(nθ)]
[yn=rsin(nθ)]
根据前面两对点的坐标值,可推导出新的一个点的坐标。下面推出递推公式:
[xn+2=rcos((n+2)θ)] [=rcos((n+1)θ)cos(θ)-rsin((n+1)θ)sin(θ)=2rcos(θ)cos((n+1)θ)-r(cos((n+1)θ)cos(θ)+sin((n+1)θ)sin(θ)=2rcos(θ)cos((n+1)θ)-rcos(nθ)=2cos(θ)xn+1-xn]
[yn+2=rsin((n+2)θ)] [=rsin((n+1)θ)cos(θ)+rcos((n+1)θ)sin(θ)=2rcos(θ)sin((n+1)θ)-r(sin((n+1)θ)cos(θ)-cos((n+1)θ)sin(θ))=2rcos(θ)sin((n+1)θ)-rsin(nθ)=2cos(θ)yn+1-yn]
r为正多边形外接圆半径,m为多边形的边数,color为生成多边形所用的颜色。t为每一条边对应圆心角值。初始化后每次循环生成一对点画一条线,直到执行m-1次循环。
1.2 正多边形的生成算法
Pcreat(r,m,color)
int r,m,color;
{
int i,cx,cy;
float xn0,yn0,xn1,yn1,xn2,yn2,pi,t,d;
pi=3.1415927; /*pi是圆周率*/
t=2*pi/m;
d=2*cos(t); /*t为上面递推公式中的等分角度*/
xn0=0; /*(xn0,yn0),第1对起始点初始化*/
yn0=r;
xn1=r*cos(t); /*(xn1,yn1),第2对起始点初始化*/
yn1=r*sin(t);
line (xn0,yn0)-(xn1,yn1),color; /*两对起始点以color颜色画线*/
for (i=2;i<=m;i++)
{
xn2=d*xn1-xn0; /*计算新的一对坐标(xn2,yn2)*/
yn2=d*yn1-yn0;
Line (xn2,yn2)-(xn1,yn1),color; /*两对点以color颜色画线*/
xn0=xn1;
yn0=yn1;
xn1=xn2;
yn1=yn2;
}
}/*pcreat*/
1.3 正多边形应用实例输出
用VB6.0编写程序得到图1。
1.4 正多边形算法分析
算法速度主要取决于正多边形的边数(m)和计算每对点的计算量。初始化后,计算每对绘图点需要2次乘法运算。计算m个绘图点需要2m次乘法运算。……
