个性化阅读
专注于IT技术分析

计算机图形:多项式方法

本文概述

椭圆具有长轴和短轴。如果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;
		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();
}

输出:

多项式法

赞(0)
未经允许不得转载:srcmini » 计算机图形:多项式方法

评论 抢沙发

评论前必须登录!