本文概述
椭圆具有长轴和短轴。如果a1和b1分别是长轴和短轴。椭圆的中心是(i, j)。 x的值将从i递增到a1, y的值将使用以下公式计算
多项式方法的缺点
- 它需要平方值。因此需要浮点计算。
- 为此类计算而开发的例程非常复杂且缓慢。
算法
1.设置初始变量:a =主轴长度; b =短轴长度; (h, k)=椭圆中心的坐标; x = 0; i =步骤; xend = a。
2.测试以确定整个椭圆是否已被扫描转换。如果x> xend, 请停止。
3.计算y坐标的值:
4.在当前(x, y)坐标上绘制对称找到的四个点:
图(x + h, y + k)图(-x + h, -y + k)图(-y-h, x + k)图(y + h, -x + k)
5.递增x; x = x + i。
6.转到步骤2。
使用多项式方法绘制椭圆的程序:
#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
class bresen
{
float x, y, a, b, r, t, te, xend, h, k, step;
public:
void get ();
void cal ();
};
void main ()
{
bresen b;
b.get ();
b.cal ();
getch ();
}
void bresen :: get ()
{
cout<<"\n ENTER CENTER OF ELLIPSE";
cout<<"\n enter (h, k) ";
cin>>h>>k;
cout<<"\n ENTER LENGTH OF MAJOR AND MINOR AXIS";
cin>>a>>b;
cout<<"\n ENTER Step Size";
cin>> step;
}
void bresen ::cal ()
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int midx, midy, i;
/* initialize graphics and local variables */
initgraph (&gdriver, &gmode, " ");
/* read result of initialization */
errorcode = graphresult ();
if (errorcode ! = grOK) /*an error occurred */
{
printf("Graphics error: %s \n", grapherrormsg (errorcode);
printf ("Press any key to halt:");
getch ();
exit (1); /* terminate with an error code */
}
x = 0;
xend=a;
whilex (x<xend)
{
t= (1-((x * x)/ (a * a)));
if (t<0)
te=-t;
else
te=t;
y=b * sqrt (te);
putpixel (h+x, k+y, RED);
putpixel (h-x, k+y, RED);
putpixel (h+x, y-y, RED);
putpixel (h-x, k-y, RED);
x+=step;
}
getch();
}
输出:
评论前必须登录!
注册