计算机图形(多项式方法)

本文概述

  • 多项式方法的缺点
  • 算法
椭圆具有长轴和短轴。如果a1和b1分别是长轴和短轴。椭圆的中心是(i, j)。 x的值将从i递增到a1, y的值将使用以下公式计算
计算机图形(多项式方法)

文章图片
多项式方法的缺点
  1. 它需要平方值。因此需要浮点计算。
  2. 为此类计算而开发的例程非常复杂且缓慢。
计算机图形(多项式方法)

文章图片
算法 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(); }

输出:
计算机图形(多项式方法)

文章图片

    推荐阅读