查看: 2621|回复: 3

set_pixel画直线(请无视)

  [复制链接]
梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
回帖
1175
发表于 2007-4-25 19: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点,误差应该很小了


梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
回帖
1175
发表于 2007-4-25 19: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点,误差应该很小了


梦石
0
星屑
55
在线时间
20 小时
注册时间
2005-10-24
回帖
1175
 楼主| 发表于 2007-4-25 22:51:47 | 显示全部楼层
以下引用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 最后编辑]

回复

使用道具 举报

头像被屏蔽

苹果梨

梦石
0
星屑
43
在线时间
6 小时
注册时间
2007-2-14
回帖
674
发表于 2007-4-25 23:46:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部