Project1

标题: set_pixel画直线(请无视) [打印本页]

作者: sizz123    时间: 2007-4-25 19:17
标题: set_pixel画直线(请无视)
  这不是教程,也不是心得体会,仅仅是怕我电脑死掉而写的遗嘱.
------------------------------------------------------------------------
画直线就要去循环线上的点,但实际问题是----描点函数的参数有2个,你循环就要2个参数一起循环,如果循环到x终止循环,y还要继续循环的时候,程序就很麻烦了.所以,我写下一下的纪录.为2点法画直线做纪录的图形分割法


设置2点坐标,直接连接直线
sx=起点x;sy=起点y;ex=终点x;ey=重点y#假如以上数据可以输入
s=Sprite.new
s.bit=Bitmap.new(600,800)
#逐渐描绘线上的点
s.bit.set_piexl(x,y,color)#颜色参数假定已知
----------------------------------------------------------------------------------------
算法:
1,判断起点到中点两条线(sx到ex和sy到ey的比较),比较的目的在于以后while函数调用的时候可以按条件让一个数中止变化

a=(sx-ex).abs
b=(sy-ey).abs#同时循环2个函数比较麻烦,可以按照先循环相同部分,然后循环多余部分的函数
比如以上的比较,就取a-b的绝对值((a-b).abs)

先用while循环描绘公共部分,因为这里x==y,所以可以只设置一个数值
    x==y
    x=sx#设置起点
    while x<e#在终点前循环
    s.bit.set_piexl(x,y,color)
    x+=1
    end
然后根据a,b的比较,再次循环描绘多余的部分,那么其中一个参数就又固定了

这算法有误差----那个x如何增加,虽然有其公共部分,但肯定不是整数.但是,已经精确到了pixel点,误差应该很小了



作者: sizz123    时间: 2007-4-25 19:17
标题: set_pixel画直线(请无视)
  这不是教程,也不是心得体会,仅仅是怕我电脑死掉而写的遗嘱.
------------------------------------------------------------------------
画直线就要去循环线上的点,但实际问题是----描点函数的参数有2个,你循环就要2个参数一起循环,如果循环到x终止循环,y还要继续循环的时候,程序就很麻烦了.所以,我写下一下的纪录.为2点法画直线做纪录的图形分割法


设置2点坐标,直接连接直线
sx=起点x;sy=起点y;ex=终点x;ey=重点y#假如以上数据可以输入
s=Sprite.new
s.bit=Bitmap.new(600,800)
#逐渐描绘线上的点
s.bit.set_piexl(x,y,color)#颜色参数假定已知
----------------------------------------------------------------------------------------
算法:
1,判断起点到中点两条线(sx到ex和sy到ey的比较),比较的目的在于以后while函数调用的时候可以按条件让一个数中止变化

a=(sx-ex).abs
b=(sy-ey).abs#同时循环2个函数比较麻烦,可以按照先循环相同部分,然后循环多余部分的函数
比如以上的比较,就取a-b的绝对值((a-b).abs)

先用while循环描绘公共部分,因为这里x==y,所以可以只设置一个数值
    x==y
    x=sx#设置起点
    while x<e#在终点前循环
    s.bit.set_piexl(x,y,color)
    x+=1
    end
然后根据a,b的比较,再次循环描绘多余的部分,那么其中一个参数就又固定了

这算法有误差----那个x如何增加,虽然有其公共部分,但肯定不是整数.但是,已经精确到了pixel点,误差应该很小了



作者: sizz123    时间: 2007-4-25 22:51
以下引用sizz123于2007-4-25 11:17:55的发言:

这不是教程,也不是心得体会,仅仅是怕我电脑死掉而写的遗嘱.
------------------------------------------------------------------------
画直线就要去循环线上的点,但实际问题是----描点函数的参数有2个,你循环就要2个参数一起循环,如果循环到x终止循环,y还要继续循环的时候,程序就很麻烦了.所以,我写下一下的纪录.为2点法画直线做纪录的图形分割法
(一般计算直线都是根据钩股定理,做个直角三角形)


设置2点坐标,直接连接直线
sx=起点x;sy=起点y;ex=终点x;ey=重点y#假如以上数据可以输入
s=Sprite.new
s.bit=Bitmap.new(600,800)
#逐渐描绘线上的点
s.bit.set_piexl(x,y,color)#颜色参数假定已知
----------------------------------------------------------------------------------------
算法:
1,判断起点到中点两条线(sx到ex和sy到ey的比较),比较的目的在于以后while函数调用的时候可以按条件让一个数中止变化

a=(sx-ex).abs
b=(sy-ey).abs#同时循环2个函数比较麻烦,可以按照先循环相同部分,然后循环多余部分的函数
比如以上的比较,就取a-b的绝对值((a-b).abs)

先用while循环描绘公共部分,因为这里x==y,所以可以只设置一个数值
   x==y
   x=sx#设置起点
   while x<e#在终点前循环
   s.bit.set_piexl(x,y,color)
   x+=1
   end
然后根据a,b的比较,再次循环描绘多余的部分,那么其中一个参数就又固定了

这算法有误差----那个x如何增加,虽然有其公共部分,但肯定不是整数.但是,已经精确到了pixel点,误差应该很小了





[本贴由作者于 2007-4-25 14:43:48 最后编辑]


作者: gpra8764    时间: 2007-4-25 23:46
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1