打印

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

[复制链接]
5463|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王利110|  楼主 | 2011-5-26 18:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
呵呵,我只会写这么多了。。。
//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);             //1  0~45
  LCD_DrawPoint(x0+a,y0+b);             //2  90~45
  LCD_DrawPoint(x0-a,y0+b);             //3  90~135
                                 
   LCD_DrawPoint(x0-b,y0+a);             //4  180~135
   LCD_DrawPoint(x0-b,y0-a);             //5  180~225
            
   LCD_DrawPoint(x0-a,y0-b);             //6   270~225         
  LCD_DrawPoint(x0+a,y0-b);             //7  270~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

使用特权

评论回复
5
hookie1990| | 2014-5-2 15:53 | 只看该作者
为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊

使用特权

评论回复
6
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--;
                }       
        }       

}

使用特权

评论回复
评论
18375156056 2022-5-22 11:22 回复TA
abs是干嘛用的 有没有函数 
7
天风立马| | 2014-5-4 19:12 | 只看该作者
hookie1990 发表于 2014-5-2 15:53
为什么不贴出来算法啊啊啊啊?????
我还不会啊啊啊 啊啊

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

使用特权

评论回复
8
z6697961| | 2015-1-5 19:30 | 只看该作者
fi1 ...fi4是什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

47

帖子

1

粉丝