王利110 发表于 2011-5-26 18:57

菜鸟求LCD画弧线算法....

呵呵,我只会写这么多了。。。
//x0,y0圆点坐标;L1,L2起始终止角度;R半径
void Draw_arc( unsigned int x0,unsigned int y0,unsigned int L1,unsigned int L2,unsigned int R)
{

}
想来想去感觉自己的算法太.。。。太....过复杂。。
菜鸟求教。。。
希望高手指点.......


附上画圆的嘿嘿....
或许能参考上吧....
//在指定位置画一个指定大小的圆
//(x,y):圆心点
//r    :半径
void Draw_Circle(u8 x0,u16 y0,u8 r)
{
int a,b;
int di;
a=0;b=r;
di=3-(r<<1);             //判断下个点位置的标志
while(a<=b)
{
LCD_DrawPoint(x0+b,y0-a);             //0   360~315
LCD_DrawPoint(x0+b,y0+a);             //10~45
LCD_DrawPoint(x0+a,y0+b);             //290~45
LCD_DrawPoint(x0-a,y0+b);             //390~135
                                 
   LCD_DrawPoint(x0-b,y0+a);             //4180~135
   LCD_DrawPoint(x0-b,y0-a);             //5180~225
            
   LCD_DrawPoint(x0-a,y0-b);             //6   270~225         
LCD_DrawPoint(x0+a,y0-b);             //7270~315   
                        
a++;
//使用Bresenham算法画圆   
if(di<0)di +=4*a+6;   
else
   {
   di+=10+4*(a-b);   
   b--;
   }
}
}

王利110 发表于 2011-5-27 12:01

:(自己顶一下。。别沉了!!

王利110 发表于 2011-5-29 16:42

本人已解决,,,,,,,

老鱼探戈 发表于 2011-5-31 16:04

从发帖到解决的时间也不是很长,兄弟看好你 :lol

hookie1990 发表于 2014-5-2 15:53

为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊

hookie1990 发表于 2014-5-4 17:54

作为做技术的怎么一点分享的精神都没有。,,自己解决了都不传代码。。。我这两天刚解决。。。我给大家传!!!

/************************圆弧插补算法
        液晶坐标系统如下:
        0------->x
        |
        |
        |
        y
        调用实例如下:
        arc_chabu_area1(120,340,120,275,180,340);       
        arc_chabu_area2(415,145,390,110,415,100);
        arc_chabu_area3(250,225,250,275,200,225);
        arc_chabu_area4(250,225,300,225,250,275);
       
        注意:调用弧线的起始和终点按逆时针方向;
              参数说明:
              x0,y0 圆心坐标
              x1,y1 起点坐标
              x2,y2 终点坐标       
              LCD_DrawLine(xi,yi,x,y,5);中的数字5为线宽设置。
                                                                                                               
******************************************/
void arc_chabu_area1(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
       
        u16 x,y,xi,yi;
        u8 e;
        x=xi=x2;
        y=yi=y2;
        POINT_COLOR=GRAY;
        e=abs(x2-x1)+abs(y2-y1);
        while(e!=0)
        {
                if(fi1>=0)
                {
                       x=xi-1;
                       fi1=fi1+2*(x0-xi)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                       xi=x;
                       e--;
                }
                else
                {
                        y=yi-1;
                        fi1=fi1+2*(y0-yi)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                        yi=y;
                        e--;
                }       
        }       

}

void arc_chabu_area2(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
       
        u16 x,y,xi,yi;
        u8 e;
        x=xi=x2;
        y=yi=y2;
        e=abs(x2-x1)+abs(y2-y1);
        while(e!=0)
        {
                if(fi2>=0)
                {
                       y=yi+1;
                       fi2=fi2+2*(yi-y0)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                       yi=y;
                       e--;
                }
                else
                {
                        x=xi-1;
                        fi2=fi2+2*(x0-xi)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                        xi=x;
                        e--;
                }       
        }       

}


void arc_chabu_area3(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
       
        u16 x,y,xi,yi;
        u8 e;
        x=xi=x2;
        y=yi=y2;
        e=abs(x2-x1)+abs(y2-y1);
        while(e!=0)
        {
                if(fi3>=0)
                {
                       x=xi+1;
                       fi3=fi3+2*(xi-x0)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                       xi=x;
                       e--;
                }
                else
                {
                        y=yi+1;
                        fi3=fi3+2*(yi-y0)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                        yi=y;
                        e--;
                }       
        }       

}

void arc_chabu_area4(u16 x0,u16 y0,u16 x1,u16 y1,u16 x2,u16 y2)
{
       
        u16 x,y,xi,yi;
        u8 e;
        x=xi=x2;
        y=yi=y2;
        e=abs(x2-x1)+abs(y2-y1);
        while(e!=0)
        {
                if(fi4>=0)
                {
                       y=yi-1;
                       fi4=fi4+2*(y0-yi)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                       yi=y;
                       e--;
                }
                else
                {
                        x=xi+1;
                        fi4=fi4+2*(xi-x0)+1;
                        LCD_DrawLine(xi,yi,x,y,5);
                        xi=x;
                        e--;
                }       
        }       

}

天风立马 发表于 2014-5-4 19:12

hookie1990 发表于 2014-5-2 15:53 static/image/common/back.gif
为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊

去下载<计算机图形学>想画啥画啥.

z6697961 发表于 2015-1-5 19:30

fi1 ...fi4是什么?
页: [1]
查看完整版本: 菜鸟求LCD画弧线算法....