Project1

标题: 抛物线轨迹函数 [打印本页]

作者: 后知后觉    时间: 2012-4-11 15:21
标题: 抛物线轨迹函数
本帖最后由 后知后觉 于 2012-4-11 15:33 编辑

也不知道 Ruby 的 Math 有没有这东西.自己做了一个...
这个东西可以用来计算某些东西的移动轨迹.
比如某人投掷了一枚手榴弹.
然后那手榴弹在天空中划出一条漂亮的抛物线.
至于要怎么具体应用到实处.那就是使用者自己的事了.

在线测试地址:

  http://x.66rpg.com/game.php?id=52

按一下键盘的 A 键后方向键可移动 A 点
按一下键盘的 S 键后方向键可移动 B 点
按一下键盘的 D 键后方向键可移动 C 点
默认是移动 C 点

调用方法:

  HzhjMath.parabola(x1, y1, x2, y2, x3, y3, x = nil)
    若给定 x 函数则返回 y
    若省略 x 函数则返回 a,b,c

  HzhjMath.parabola_y(x, a, b, c)
    求得 y 值

使用时要注意要确保 x1≠x2≠x3

代码如下:

  1. #==============================================================================
  2. # ■ 抛物线函数 by 后知后觉([email protected])2012-4-11
  3. #==============================================================================

  4. module HzhjMath
  5.   def self.parabola(x1, y1, x2, y2, x3, y3, x = nil)
  6.     x1 = x1.to_f; y1 = y1.to_f
  7.     x2 = x2.to_f; y2 = y2.to_f
  8.     x3 = x3.to_f; y3 = y3.to_f
  9.     x1p = x1 * x1
  10.     x2p = x2 * x2
  11.     x3p = x3 * x3
  12.     a = ((y1-y2)*(x1-x3)-(y1-y3)*(x1-x2)) / ((x1p-x2p)*(x1-x3)-(x1p-x3p)*(x1-x2))
  13.     b = ((y1-y2) - (x1p-x2p)*a) / (x1-x2)
  14.     c = y1 - a * x1p - b * x1
  15.     return a,b,c unless x
  16.     return parabola_y(x, a, b, c)
  17.   end
  18.   def self.parabola_y(x, a, b, c)
  19.     y = a * x * x + b * x + c
  20.     return y.round
  21.   end
  22. end

复制代码

作者: end55rpg    时间: 2012-4-11 21:55
请问你图是否用的bitmap里的描绘?
作者: 后知后觉    时间: 2012-4-12 01:21
end55rpg 发表于 2012-4-11 21:55
请问你图是否用的bitmap里的描绘?

Bitmap 的 set_pixel




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