计算机图形学基础(2)——画圆,椭圆算法

画圆和椭圆算法

  • 中点画圆法
void MidPointCircle(int r){
    int x,y,d,deltaX,deltaY;
    x = 0;
    y = r;
    d = 1-r;
    deltaX = 3;
    deltaY = -2*r + 2;
    while(x<=y){
        if(d<0){
            d+=deltaX;
            deltaX+=2;
            x++;
        }
        else{
            d+=(deltaX+deltaY);
            deltaX+=2;
            deltaY+=2;
            x++;
            y--;
        }
    DrawPixel(x,y);
    DrawPixel(y,x);
    DrawPixel(-x,y);
    DrawPixel(y,-x);
    DrawPixel(-x,-y);
    DrawPixel(-y,-x);
    DrawPixel(x,-y);
    DrawPixel(-y,x);
    }
} 
  • Bersenham画圆法(优化版)
void BersenhamCircle(int r){
    int x,y,delta,delta1,delta2,direction;
    x=0;
    y=r;
    delta = 2*(1-r);
    while(y>=0){
        DrawPixel(x,y);
        DrawPixel(-x,y);
        DrawPixel(-x,-y);
        DrawPixel(x,-y);
        if(delta<0){
            delta1 = 2*delta+2*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)+2;
                break;
            case 3:
                y--;
                delta+=1-2*y;
                break;
        }
    }
}
  • 中点画椭圆法
void MidPointEllipse(int a,int b){
    int x,y;
    float d1,d2;
    x=0;
    y=b;
    d1=b*b+a*a*(-b+0.25);
    while(b*b*(x+1)<a*a*(y-0.5)){
        DrawPixel(x,y);
        DrawPixel(-x,y);
        DrawPixel(-x,-y);
        DrawPixel(x,-y);
        if(d1<0){
            d1+=b*b*(2*x+3);
            x++;
        }
        else{
            d1+=b*b*(2*x+3)+a*a*(-2*y+2);
            x++;
            y--;
        }
    }
    d2=pow(b*(x+0.5),2)+pow(a*(y-1),2)-pow(a*b,2);
    while(y>=0){
        DrawPixel(x,y);
        DrawPixel(-x,y);
        DrawPixel(-x,-y);
        DrawPixel(x,-y);
        if(d2<0){
            d2+=b*b*(2*x+2)+a*a*(-2*y+3);
            x++;
            y--;
        }
        else{
            d2+=a*a*(-2*y+3);
            y--;
        }
    }
} 


这里写图片描述
最新的GTsport,支持4k,60
fps,hdr,widecolo,vr

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值