algorithm - 粒子从球形边界反弹 3D
问题描述
这很奇怪,但我找不到任何清晰的算法来在 3D 空间中反弹球形边界。
例如,我有一个在空心球体内具有任意速度的粒子。这个粒子没有任何形状/身体,只是一个点坐标。
当粒子撞击边缘时(与球体原点的距离大于球体半径),更有可能必须找到一个平面并计算该平面的反射角。
但是,也许有另一种方法?
解决方案
扩展我的评论:
设P为质点位置,V为质点速度,C为圆心。
然后:
- 计算切面法线:N = (CP)/|CP|
- 计算速度的法向分量:Vn = N·V
- 确保它指向内部: if (Vn < 0) then V+=2*Vn*N
您可以重新排列以摆脱平方根:
- N = CP
- Vn = N·V
- 如果 (Vn<0) 那么 V+=2*Vn*N/|N|²
推荐阅读
- angular - Angular材料如何以相同的形式动态创建添加多个自动完成
- c# - 比较 Json Collection,返回变化值
- java - 如何在 selenium 中关闭 web 驱动程序之前验证文件下载是否完成?
- javascript - 上传到 Firestore 云功能时出错
- javascript - 在 JavaScript 中延迟 While 循环
- c - 显示结构数组内容时出现问题
- java - Java中的字符串计算器
- mongodb - Mongodb 查找各组中最新的并在 Spring boot 中实现
- javascript - 如果下一页使用 java 脚本加载,没有 URL 更改,我如何使用 python 抓取下一页数据?
- jquery - JQuery 对话框只工作一次