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

计算机图形中点圆算法

它基于以下功能, 用于测试任意点(x, y)与以原点为中心的半径r的圆之间的空间关系:

中点圆算法
中点圆算法

现在, 考虑像素T和像素S之间的中间点的坐标

这称为中点(xi + 1, yi-), 我们用它来定义决策参数:

Pi=f (xi+1, yi-) = (xi+1)2+(yi-)2-r2 ……………equation 2

如果Pi是-ve⟹中点在圆内, 我们选择像素T

如果Pi是+ ve⟹中点在圆之外(或在圆上), 我们选择像素S。

下一步的决策参数是:

Pi+1=(xi+1+1)2+(yi+1-)2- r2…………equation 3

由于xi + 1 = xi + 1, 我们有

中点圆算法

如果选择像素T⟹Pi<0

我们有yi + 1 = yi

如果选择像素S⟹Pi≥0

我们有yi + 1 = yi-1

中点圆算法

我们可以继续用(xi, yi)的n来简化它, 得到

中点圆算法

现在, 由等式2得出的Pi(0, r)的初始值

中点圆算法

我们可以把≅1∴r是一个整数所以, P1 = 1-r

算法

步骤1:将x = 0, y = r代入等式2中, 我们有p = 1-r

步骤2:在x≤y的情况下重复步骤x(y, y)如果(p <0)然后设置p = p + 2x + 3其他p = p + 2(xy)+5 y = y-1(如果结束)x = x + 1(结束循环)

第三步:结束

程序使用中点算法绘制圆:

#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, p;
	public:
	void get ();
	void cal ();
};
	void main ()
    {
	bresen b;
	b.get ();
	b.cal ();
	getch ();
   }
	Void bresen :: get ()
   {
	cout<<"ENTER CENTER AND RADIUS";
	 cout<< "ENTER (a, b)";
	cin>>a>>b;
	cout<<"ENTER r";
	cin>>r;
}
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;
	y=r;
	putpixel (a, b+r, RED);
	putpixel (a, b-r, RED);
	putpixel (a-r, b, RED);
	putpixel (a+r, b, RED);
	p=5/4)-r;
	while (x<=y)
	{
		If (p<0)
		p+= (4*x)+6;
		else
		{
			p+=(2*(x-y))+5;
			y--;
		}
		x++;
		putpixel (a+x, b+y, RED);
		putpixel (a-x, b+y, RED);
		putpixel (a+x, b-y, RED);
		putpixel (a+x, b-y, RED);
		putpixel (a+x, b+y, RED);
		putpixel (a+x, b-y, RED);
		putpixel (a-x, b+y, RED);
		putpixel (a-x, b-y, RED);
	}
}

输出:

中点圆算法

赞(0)
未经允许不得转载:srcmini » 计算机图形中点圆算法

评论 抢沙发

评论前必须登录!