javascript - 如何计算球与墙壁碰撞的反射角
问题描述
我有一个球,我正在将它移向这样的角度:
ball.x += ball.speed * Math.sin(ball.angle)
ball.y += ball.speed * -Math.cos(ball.angle)
当球与墙壁碰撞时如何计算反射角?(水平或垂直)
解决方案
对于任何具有法向量的墙,e_n
具有初始速度向量的球在反射后v_i
的速度向量为v_f
v_f = v_i - 2 dot( v_i, e_n) e_n
,
哪里dot
是向量点积。
解释:v_i
on的投影e_n
是dot( v_i, e_n )
。这是朝向墙壁的速度,这是反射时反转的部分。该分量p = dot( v_i, e_n )
产生一个向量p e_n
。剩余分量可以通过叉积或简单地计算v_s = v_i - p e_n
。最终速度是未改变的分量加上反向投影分量,即v_s - p e_n = v_i - 2 p e_n = v_i - 2 dot( v_i, e_n) e_n
推荐阅读
- javascript - 数组内的值差异
- ruby-on-rails - 如何在使用 Rails Mailer Preview 时保持干净的开发数据库
- excel - Excel 应用程序在使用 Microsoft.Office.Interop.Excel 初始化对象时冻结
- copy - 如何在 SuSE 12.5 的文件目录中的所有文件上附加副本
- apache-spark - Spark 托管和非托管表
- sql - Grafana SQL 查询局部变量
- postgresql - 来自任意数量的人的 Postgress 时间序列存储
- java - Fluent builder设计模式——如何强制客户设置变量
- amazon-web-services - 不同客户端对 S3 的访问不同(CyberDuck 与 ExpanDrive)
- javascript - 通过 JQuery 函数传递 HTML 名称