- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要画一束可以在盒子周围反弹的激光束。基本上,激光束的长度是可变的,当它从表面反射时,它会以碰撞的角度反射。
我可以自己处理碰撞问题(可能还没有尝试过),但我对实际绘图在这里如何工作感到困惑。这不像我画一条直线,我有时需要复制这条线,这样就会有两条线彼此成一定角度,但是当激光束停止时,游戏需要计算出光束的末端在哪里,所以在整个光束从表面弹回后,它可以停止绘制第一条线。
抱歉,我的解释很糟糕。
最佳答案
我的数学和三角学有点生疏,但这是我的尝试。
光束的正确位置和长度取决于四个变量,
基本上,以速度v行进的光束以theta角度撞击墙壁。碰撞会发生多久? (从发生碰撞到光束完全通过入射点需要多长时间?)
首先,由于光束相对于正交坐标集以一定角度行进,因此我们应该获得速度和长度的 x 和 y 分量。
v.x = cos(theta) * v
v.y = sin(theta) * v
l.x = cos(theta) * l
l.y = sin(theta) * l
如果光束可以反射的墙壁本身有角度,则必须使用墙壁的角度作为引用框架(使用两个角度之间的差值)来投影到它们上。
现在光束从左侧射出并离开右侧所需的时间由下式给出:
d = l.x/v.x
假设事件开始于时间t,当前时间为T。那么,在入射点左右两侧绘制的光束所占的比例为,
r = (T - t)/d
左 = l * r
右 = l * (1 - r)
此示例经过简化,仅显示如何计算光束从左向右照射时的位置。我认为将这些原理应用于从顶部或底部撞击垂直障碍物的光束应该是一个相当简单的过程。另外,请考虑梁头撞击第二个障碍物但仍与第一个障碍物发生碰撞的情况。
在这种情况下,我们需要另一个变量来代替 l 来表示不是梁的整个长度,而是梁可用于碰撞的部分的长度(两者之间的欧几里得距离)事件地点)。
关于iphone - 如何绘制移动的激光束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3392743/
我是一名优秀的程序员,十分优秀!