以下引用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 最后编辑]
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |