jasonli 发表于 2010-8-12 14:06:04

傻孩子,你的“怎样在点阵屏上绘图——基于LCD12864 ”上说的Bresenham算法为什么和书

傻孩子,你的“怎样在点阵屏上绘图——基于LCD12864 ”上说的Bresenham算法为什么和书上讲的算法不一样?能仔细讲一下吗?
为什么x和y要和inc进行比较,只有在大于等于inc的情况下,当前点才能加1或减1?
附傻孩子的伪代码:

在(x1,y1)到(x2,y2)之间画一条直线
   dx 是x到终点横坐标的距离
   dy 是y到终点纵坐标的距离
   ix 是dx的绝对值
   iy 是dy的绝对值
   inc是dx和dy中较大的那个
   plot是是否要画一个点的标志位,boolean变量

   plotx 是当前点所在的横坐标
   ploty 是当前点所在的纵坐标

   plotx = x1
   ploty = y1   
   x = 0
   y = 0

   在 plotx,ploty画一个点——起点
   
   for i = 0 to inc 增量1
       x += ix
       y += iy
       plot = false

       if x > inc then
         plot = true
         x -= inc
               if dx > 0 then plotx ++
               if dx < 0 then plotx --

       if y > inc then
         plot = true
         y -= inc
               if dy > 0 then ploty ++
               if dy < 0 then ploty --

       if plot == true then 在(plotx,ploty)处画点

Gorgon_Meducer 发表于 2010-8-12 14:44:16

Bresenham算法的原理就是固定一个坐标轴,每次增量1,然后去检查另外一个坐标的增量,
如果大于等于一个点,就给另外一个坐标加一,如果不够,就继续累加增量……

jasonli 发表于 2010-8-12 15:36:20

回复【1楼】Gorgon Meducer 傻孩子
bresenham算法的原理就是固定一个坐标轴,每次增量1,然后去检查另外一个坐标的增量,
如果大于等于一个点,就给另外一个坐标加一,如果不够,就继续累加增量……
-----------------------------------------------------------------------

那为什么需要 x += ix; y += iy; 然后再去和inc比较呢?你给的伪代码中只是在x轴上增加x的增量,在y轴上增加y的增量,然后判断和inc的大小,这是什么意思,一时理解不了,只能请教了、!

Gorgon_Meducer 发表于 2010-8-13 09:36:05

前面的算法是一个同时适应两个轴的算法,你按照算法中的描述自己一步一步走一下就知道了。

gasolhu 发表于 2010-8-13 22:06:54

技术贴,标记

redworlf 发表于 2011-2-23 10:13:04

还是不明白

Gorgon_Meducer 发表于 2011-2-23 18:08:02

to 【5楼】 redworlf 果子
   看3楼的回复
页: [1]
查看完整版本: 傻孩子,你的“怎样在点阵屏上绘图——基于LCD12864 ”上说的Bresenham算法为什么和书