本文概述
- 多项式方法的缺点
- 算法
文章图片
多项式方法的缺点
- 它需要平方值。因此需要浮点计算。
- 为此类计算而开发的例程非常复杂且缓慢。
文章图片
算法 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;
elsete=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();
}
输出:
文章图片
推荐阅读
- 计算机图形(三角法)
- 计算机图形中点圆算法
- 布雷森汉姆的循环算法
- 使用极坐标定义一个圆
- 使用多项式方法定义一个圆
- 计算机图形(定义一个圆)
- 计算机图形(布雷森汉姆线算法)
- 计算机图形DDA算法
- 计算机图形(扫描转换直线)