图形学————圆和椭圆的扫描转换

本文详细介绍了两种扫描转换方法来绘制圆:中心画圆法和Bresenham画圆算法。中心画圆法通过构造函数F(x, y)判断点是否在圆内,Bresenham算法则利用增量方法高效地绘制圆。每种方法都通过实例和伪代码进行了清晰的阐述。" 122953586,9369275,FPGA设计实践:用双输入NAND门构建四输入NAND门,"['FPGA开发', '逻辑门', '硬件描述语言']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一  圆的扫描转换

    一个圆可以分为等价的八份,若其中一份的点的坐标是(x,y),那么另外七份分别是(y,x),(-x,y),(-x,-y),(x,-y),(y,-x),(-y,-x),(y,-x)


    1 中心画圆法(讨论 (0,R)到(√2R,√2R))

       构造函数F(x,y)=x^2+y^2-R^2  对于园外的点来说 F(x,y)>0 对于园内的点来说,F(x,y)<0

       判别式:

                    d=F(M)=(x+1)^2+(y-0.5)^2-R^2

    d<0

    d=F(x+2,y-0.5)=(x+2)^2+(y-0.5)^2+R^2=d+2x+3

      d>0

    d=F(x+2,y-1.5)=(x+2)^2+(y-1.5)^2+R^2=d+2(x-y)+5

    d0=F(1,R-0.5)=1.25-r


         MindpointCircle(r,color)
int r,color;
{
int x,y;
float d;
x=0;y=r;d=1.25-r;
while(x<y)
{
if(d>0)
{
d=d+x*2+3;
x++;
}
else
{
d=d+2*(x-y)+5;
x++;
y--;
}
drawpixel(x,y,color);
}
}


   2 Bresenham 画圆算法

        Breseham_Circle(r,color)
int r,color;
{
int x,y,delta1,delta2,delta,direction;
x=0;y=r;
delta=2*(1-r);
while(y>=0)
{
drawpixal(x,y,color);
if(delta<0)
{
delta1=2*(delta+y)-1;
if(delta1<0) direction=1;
else direction=2;

}
else if(delta>0)
{
delta2=2*(delta-x)-1;
if(delta2<=0) direction=2;
else direction=3
}
else 
direction=2;
switch(direction)
{
case 1 : x++;
delta+=2*x+1;break;
case 2 :x++;y--;
delta+=2*(x-y+1);
break;
case 3 :y--;
delta+=(-2*y+1)
break;
}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值