设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2911|回复: 26
打印 上一主题 下一主题

还是填充一个三角形= =

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-2-26
帖子
40
跳转到指定楼层
1
发表于 2008-3-9 19:56:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
这是上次水水给出的填充一个三角形的答案:
  1. def draw_triangle(x1,y1,x2,y2,x3,y3,color=Color.new(0,0,0,255))
  2. triangle=Sprite.new
  3. triangle.bitmap=Bitmap.new(640,480)
  4. x=0
  5. if x2 != x1
  6. k1=(y2-y1)*1.0/(x2-x1)
  7. end
  8. if x3 != x1
  9. k2=(y3-y1)*1.0/(x3-x1)
  10. end
  11. if x3 != x2
  12. k3=(y3-y2)*1.0/(x3-x2)
  13. end
  14. height=1
  15. if x1 != x2
  16. for x in x1..x2
  17.    y = (x-x1)*k1+y1 #求出点
  18.    height = (x-x1)*k2+y1-y
  19.    if height < 0
  20.      y+=height
  21.      height = 0 - height
  22.    end
  23.    triangle.bitmap.fill_rect(x, y, 1, height, color)
  24. end
  25. end
  26. if x2 != x3
  27. for x in x2..x3
  28.    y = (x-x2)*k3+y2
  29.    height = (x-x1)*k2+y1-y
  30.    if height < 0
  31.      y+=height
  32.      height = 0 - height
  33.    end
  34.    triangle.bitmap.fill_rect(x, y, 1, height, color)
  35. end
  36. end
  37. end
复制代码

大概的原理就是一条线一条线的扫描……
但是上个礼拜得到答案后发现我并不需要如此大的自由空间……
现在的要求是:
def draw_rt_triangle(bitmap,x1,y1,x2,y2,color)
x3 = x1
y3 = y2
换句话说就是要牺牲原来的描绘的自由性而全部改为直角三角形,以此来提高效率
不知道各位听懂了没有……{/gg}
P.S.我是IamI,与上次一样,就不要出来什么set_point或者是Math::sin了
版务信息:本贴由楼主自主结贴~
于是我们就这样默默走来 带着风尘仆仆的印记
所以他们就这样静静离去 带着第三流仪的决意
头像被屏蔽

Lv1.梦旅人 (禁止发言)

悔恨的天使

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-26
帖子
726
2
发表于 2008-3-9 20:14:37 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-2-26
帖子
40
3
 楼主| 发表于 2008-3-9 20:38:34 | 只看该作者
那啥……LS那是纯躲避这句话:
no Set_Point
算了,水水在不?问一下大概的原理是不是直接x差除以高度就可以得到每1y所地增减的x值,然后一条条描线,这样的话我自己去写好了……
再重复一遍我信奉的原则:
no point by point!
于是我们就这样默默走来 带着风尘仆仆的印记
所以他们就这样静静离去 带着第三流仪的决意
回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

4
发表于 2008-3-9 20:40:41 | 只看该作者
一,确定顶点,
二,确定增量,
三,直线描绘.

最傻的方法.
系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-2-26
帖子
40
5
 楼主| 发表于 2008-3-9 20:42:06 | 只看该作者
那好吧,我讨厌逐点……除了这种傻法好像没有别的方法……
于是我们就这样默默走来 带着风尘仆仆的印记
所以他们就这样静静离去 带着第三流仪的决意
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

悔恨的天使

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-26
帖子
726
6
发表于 2008-3-9 20:43:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2007-2-26
帖子
40
7
 楼主| 发表于 2008-3-9 20:45:27 | 只看该作者
以下引用Iselia雪于2008-3-9 12:43:13的发言:

啊,我这个方法后面优化成了fill_rect。
比起确定增量不过多了三条线的描绘,描那三条线至多5帧,差不多了吧- -bbb

ORZ……生理年龄限制了思维。

LS说得真好……我一帧就要几十个三角形然后还要fill_rect……就5帧而已哦……好少好少的捏
还有在脚本里面清晰地看到了“作弊”二字……{/hx}
于是我们就这样默默走来 带着风尘仆仆的印记
所以他们就这样静静离去 带着第三流仪的决意
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

悔恨的天使

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-2-26
帖子
726
8
发表于 2008-3-9 20:47:23 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv5.捕梦者

御灵的宠物

梦石
12
星屑
8438
在线时间
88 小时
注册时间
2006-12-11
帖子
3148

第2届TG大赛亚军

9
发表于 2008-3-9 20:50:25 | 只看该作者
以下引用我是我的马甲于2008-3-9 12:38:34的发言:

</script>那啥……LS那是纯躲避这句话:<br>
no Set_Point<br>
算了,水水在不?问一下大概的原理是不是直接x差除以高度就可以得到每1y所地增减的x值,然后一条条描线,这样的话我自己去写好了……<br>
再重复一遍我信奉的原则:<br>
no point by point!

是的~~~就是这样
记得要用浮点数来除...我第一次写的时候因为很傻地用了int....so....orz
还有就是,其实我好象在你帖子后边有发过改过的版本....
那个还是有问题吗?
我的Lofter:http://nightoye.lofter.com/

回复 支持 反对

使用道具 举报

Lv1.梦旅人

月下可怜人

梦石
0
星屑
50
在线时间
10 小时
注册时间
2005-11-23
帖子
4085

第1届短篇游戏比赛亚军

10
发表于 2008-3-9 20:53:14 | 只看该作者
一次fill == 四次if,
一次增量 == 一次if.

另外不规则图形描绘可以有更好的方法.直角分解.

而按照LZ的要求,说句实话,一次放缩换算,加一次fill,就OK了.几乎可以与.blt等速.
纵然千里外,我等雁归来。
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-29 23:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表