Algorithm 粒子从三维球形边界反弹

Algorithm 粒子从三维球形边界反弹,algorithm,3d,bounce,particles,Algorithm,3d,Bounce,Particles,这很奇怪,但我找不到任何清晰的算法来从三维空间中的球形边界反弹 例如,我有一个粒子,在一个空心球体内具有任意的速度。该粒子没有任何形状/实体,只有一个点坐标 更可能的情况是,当粒子撞击边缘时,必须找到一个平面[与球体原点的距离大于球体半径],然后计算该平面的反射角度 然而,也许还有其他的方法?在我的评论中展开: 设p为质点位置,V为质点速度,C为圆心 然后: 计算切平面法线:N=(C-P)/| C-P | 计算速度的法向分量:Vn=N·V 确保它指向内部:如果(Vn

这很奇怪,但我找不到任何清晰的算法来从三维空间中的球形边界反弹

例如,我有一个粒子,在一个空心球体内具有任意的速度。该粒子没有任何形状/实体,只有一个点坐标

更可能的情况是,当粒子撞击边缘时,必须找到一个平面[与球体原点的距离大于球体半径],然后计算该平面的反射角度


然而,也许还有其他的方法?

在我的评论中展开:

p为质点位置,V为质点速度,C为圆心

然后:

  • 计算切平面法线:N=(C-P)/| C-P |
  • 计算速度的法向分量:Vn=N·V
  • 确保它指向内部:如果(Vn<0),则V+=2*Vn*N
  • 可以重新排列以去掉平方根:

  • N=C-P
  • Vn=N·V

  • 如果(Vn扩展我的评论:

    p为质点位置,V为质点速度,C为圆心

    然后:

  • 计算切平面法线:N=(C-P)/| C-P |
  • 计算速度的法向分量:Vn=N·V
  • 确保它指向内部:如果(Vn<0),则V+=2*Vn*N
  • 可以重新排列以去掉平方根:

  • N=C-P
  • Vn=N·V

  • 如果(不,这是正确的方法,但是平面法线只是从粒子到中心的向量,所以非常简单。不,这是正确的方法,但是平面法线只是从粒子到中心的向量,所以非常简单。谢谢你的回答,你说的Vn<0是什么意思?Vn是3D向量,所以我必须检查每个坐标[x,y,z]或者它是一个坐标和?Vn是一个标量——N和VLook的点积。粒子的方向相反。在某些方面,这是可行的,但我需要更真实的反射。是的,如果你从中心开始,你会反弹回中心。无论你从哪里开始,它都会保持在同一平面上。如果你从中心开始,你需要作弊ant一个有趣的模式。你的解决方案有效,但如果我需要保持速度/速度,在偏转时,这个参数设置为零,所以我必须建立一个延长的轨迹以保持正确的速度。谢谢你的回答,Vn<0是什么意思?Vn是三维向量,所以我必须检查每个坐标[x,y,z]或者它是一个坐标和?Vn是一个标量——N和VLook的点积。粒子的方向相反。在某些方面,这是可行的,但我需要更真实的反射。是的,如果你从中心开始,你会反弹回中心。无论你从哪里开始,它都会保持在同一平面上。如果你从中心开始,你需要作弊一个有趣的模式。你的解决方案是有效的,但如果我需要保持速度/速度,在偏转时,这个参数设置为零,所以我必须建立一个延长的轨迹来保持正确的速度