3d 三维粒子碰撞编程

3d 三维粒子碰撞编程,3d,simulation,collision,particles,3d,Simulation,Collision,Particles,我的代码中有一部分,两个粒子在弹性碰撞中碰撞。我知道这两个粒子的质量和半径。我知道两个粒子碰撞时的中心点。我知道两个粒子的速度(包括方向)。我想计算的是碰撞后两个粒子的速度(包括方向),我想用一种有效的方法计算它。我知道这更像是一个物理问题,而不是一个计算机编程问题,但程序员似乎总是更善于找到最有效的做事方式。我在用C++编程。如果能得到任何帮助,我将不胜感激,哪怕只是给我指出正确的方向。谢谢你的帮助 我向您推荐皮克斯出版的这本书。这是关于刚体的模拟,包含一些代码,以便您可以尝试一下!:-) 您

我的代码中有一部分,两个粒子在弹性碰撞中碰撞。我知道这两个粒子的质量和半径。我知道两个粒子碰撞时的中心点。我知道两个粒子的速度(包括方向)。我想计算的是碰撞后两个粒子的速度(包括方向),我想用一种有效的方法计算它。我知道这更像是一个物理问题,而不是一个计算机编程问题,但程序员似乎总是更善于找到最有效的做事方式。我在用C++编程。如果能得到任何帮助,我将不胜感激,哪怕只是给我指出正确的方向。谢谢你的帮助

我向您推荐皮克斯出版的这本书。这是关于刚体的模拟,包含一些代码,以便您可以尝试一下!:-)


您还可以下载一些处理三维运动的C++代码。

精确解可以通过数学软件(Mathematica、sagemath等)求解。这里我使用了python包sympy。该算法采用Gröbner基和Buchberger算法,可以求解多项式方程组

弹性碰撞的方程是1)动量守恒,每个一维2)能量守恒。3) 碰撞后第一个粒子的速度在指定单位向量的方向上

方程式如下所示:

uij:碰撞前第i个粒子速度的第j个分量。
vij:碰撞后第i个粒子速度的第j个分量。
n:碰撞后指向第一个粒子速度方向的单位矢量
t:碰撞后第一个粒子速度的大小
m:质量

解决方案是:[t、v11、v12、v13、v21、v22、v23]

2*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2)/(2*m1*n1**2 + 2*m1*n2**2 + 2*m1*n3**2 + 2*m2*n1**2 + 2*m2*n2**2 + 2*m2*n3**2) + (m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23)/((m1 + m2)*(n1**2 + n2**2 + n3**2)) 


n1*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


n2*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


n3*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


(-m1**2*n1*n2*u12 - m1**2*n1*n3*u13 + m1**2*n2**2*u11 + m1**2*n3**2*u11 + m1*m2*n1**2*u11 - m1*m2*n1*n2*u22 - m1*m2*n1*n3*u23 + m1*m2*n2**2*u11 + m1*m2*n2**2*u21 + m1*m2*n3**2*u11 + m1*m2*n3**2*u21 - m1*n1*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u21 + m2**2*n2**2*u21 + m2**2*n3**2*u21)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))


(m1**2*n1**2*u12 - m1**2*n1*n2*u11 - m1**2*n2*n3*u13 + m1**2*n3**2*u12 + m1*m2*n1**2*u12 + m1*m2*n1**2*u22 - m1*m2*n1*n2*u21 + m1*m2*n2**2*u12 - m1*m2*n2*n3*u23 + m1*m2*n3**2*u12 + m1*m2*n3**2*u22 - m1*n2*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u22 + m2**2*n2**2*u22 + m2**2*n3**2*u22)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))


(m1**2*n1**2*u13 - m1**2*n1*n3*u11 + m1**2*n2**2*u13 - m1**2*n2*n3*u12 + m1*m2*n1**2*u13 + m1*m2*n1**2*u23 - m1*m2*n1*n3*u21 + m1*m2*n2**2*u13 + m1*m2*n2**2*u23 - m1*m2*n2*n3*u22 + m1*m2*n3**2*u13 - m1*n3*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u23 + m2**2*n2**2*u23 + m2**2*n3**2*u23)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))
当它第一次出现的时候,我读到了,IIRC,它是准确和有用的。但结尾是离题的。
2*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2)/(2*m1*n1**2 + 2*m1*n2**2 + 2*m1*n3**2 + 2*m2*n1**2 + 2*m2*n2**2 + 2*m2*n3**2) + (m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23)/((m1 + m2)*(n1**2 + n2**2 + n3**2)) 


n1*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


n2*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


n3*(m1*n1*u11 + m1*n2*u12 + m1*n3*u13 + m2*n1*u21 + m2*n2*u22 + m2*n3*u23 + sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2))/(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2)


(-m1**2*n1*n2*u12 - m1**2*n1*n3*u13 + m1**2*n2**2*u11 + m1**2*n3**2*u11 + m1*m2*n1**2*u11 - m1*m2*n1*n2*u22 - m1*m2*n1*n3*u23 + m1*m2*n2**2*u11 + m1*m2*n2**2*u21 + m1*m2*n3**2*u11 + m1*m2*n3**2*u21 - m1*n1*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u21 + m2**2*n2**2*u21 + m2**2*n3**2*u21)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))


(m1**2*n1**2*u12 - m1**2*n1*n2*u11 - m1**2*n2*n3*u13 + m1**2*n3**2*u12 + m1*m2*n1**2*u12 + m1*m2*n1**2*u22 - m1*m2*n1*n2*u21 + m1*m2*n2**2*u12 - m1*m2*n2*n3*u23 + m1*m2*n3**2*u12 + m1*m2*n3**2*u22 - m1*n2*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u22 + m2**2*n2**2*u22 + m2**2*n3**2*u22)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))


(m1**2*n1**2*u13 - m1**2*n1*n3*u11 + m1**2*n2**2*u13 - m1**2*n2*n3*u12 + m1*m2*n1**2*u13 + m1*m2*n1**2*u23 - m1*m2*n1*n3*u21 + m1*m2*n2**2*u13 + m1*m2*n2**2*u23 - m1*m2*n2*n3*u22 + m1*m2*n3**2*u13 - m1*n3*sqrt(-m1**2*n1**2*u12**2 - m1**2*n1**2*u13**2 + 2*m1**2*n1*n2*u11*u12 + 2*m1**2*n1*n3*u11*u13 - m1**2*n2**2*u11**2 - m1**2*n2**2*u13**2 + 2*m1**2*n2*n3*u12*u13 - m1**2*n3**2*u11**2 - m1**2*n3**2*u12**2 - 2*m1*m2*n1**2*u12*u22 - 2*m1*m2*n1**2*u13*u23 + 2*m1*m2*n1*n2*u11*u22 + 2*m1*m2*n1*n2*u12*u21 + 2*m1*m2*n1*n3*u11*u23 + 2*m1*m2*n1*n3*u13*u21 - 2*m1*m2*n2**2*u11*u21 - 2*m1*m2*n2**2*u13*u23 + 2*m1*m2*n2*n3*u12*u23 + 2*m1*m2*n2*n3*u13*u22 - 2*m1*m2*n3**2*u11*u21 - 2*m1*m2*n3**2*u12*u22 + m2**2*n1**2*u11**2 - 2*m2**2*n1**2*u11*u21 + m2**2*n1**2*u12**2 - 2*m2**2*n1**2*u12*u22 + m2**2*n1**2*u13**2 - 2*m2**2*n1**2*u13*u23 + m2**2*n1**2*u21**2 + 2*m2**2*n1*n2*u21*u22 + 2*m2**2*n1*n3*u21*u23 + m2**2*n2**2*u11**2 - 2*m2**2*n2**2*u11*u21 + m2**2*n2**2*u12**2 - 2*m2**2*n2**2*u12*u22 + m2**2*n2**2*u13**2 - 2*m2**2*n2**2*u13*u23 + m2**2*n2**2*u22**2 + 2*m2**2*n2*n3*u22*u23 + m2**2*n3**2*u11**2 - 2*m2**2*n3**2*u11*u21 + m2**2*n3**2*u12**2 - 2*m2**2*n3**2*u12*u22 + m2**2*n3**2*u13**2 - 2*m2**2*n3**2*u13*u23 + m2**2*n3**2*u23**2) + m2**2*n1**2*u23 + m2**2*n2**2*u23 + m2**2*n3**2*u23)/(m2*(m1*n1**2 + m1*n2**2 + m1*n3**2 + m2*n1**2 + m2*n2**2 + m2*n3**2))