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

计算机图形:扫描转换椭圆

椭圆也是像圆形的对称图形, 但是是四向对称而不是八向对称。

扫描转换椭圆

实现椭圆绘图算法的程序:

#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
void disp();
float x, y;
intxc, yc;
void main()
{
                intgd=DETECT, gm, a, b;
                float p1, p2;
                clrscr();
                initgraph(&gd, &gm, "c:\\turboc3\\bgi");
                printf("*** Ellipse Generating Algorithm ***\n");
                printf("Enter the value of Xc\t");
                scanf("%d", &xc);
                printf("Enter the value of yc\t");
                scanf("%d", &yc);
                printf("Enter X axis length\t");
                scanf("%d", &a);
                printf("Enter Y axis length\t");
                scanf("%d", &b);
                x=0;y=b;
                disp();
                p1=(b*b)-(a*a*b)+(a*a)/4;
                while((2.0*b*b*x)<=(2.0*a*a*y))
                {
                                x++;
                                if(p1<=0)
                                p1=p1+(2.0*b*b*x)+(b*b);
                                else
		{
                                                y--;
                                                p1=p1+(2.0*b*b*x)+(b*b)-(2.0*a*a*y);
		 }
                               disp();
                               x=-x;
                               disp();
                               x=-x;
                               delay(50);
                 }
                 x=a;
                 y=0;
                 disp();
                 p2=(a*a)+2.0*(b*b*a)+(b*b)/4;
                 while((2.0*b*b*x)>(2.0*a*a*y))
                {
                                y++;
                                if(p2>0)
                                p2=p2+(a*a)-(2.0*a*a*y);
                                else
		{
                                                x--;
                                                p2=p2+(2.0*b*b*x)-(2.0*a*a*y)+(a*a);
		 }
                                disp();
                                y=-y;
                                disp();
                                y=-y;
                                delay(50);   
            }
                getch();
                closegraph();
}
 void disp()
{
              putpixel(xc+x, yc+y, 7);
               putpixel(xc-x, yc+y, 7);
               putpixel(xc+x, yc-y, 7);
          putpixel(xc+x, yc-y, 7);
  }

输出:

扫描转换椭圆

有两种定义椭圆的方法:

  1. 定义椭圆的多项式方法
  2. 定义椭圆的三角法

赞(0)
未经允许不得转载:srcmini » 计算机图形:扫描转换椭圆

评论 抢沙发

评论前必须登录!