假定转动轴与z轴夹角为θ,相应地在xy平面投影与x轴夹角为α,旋转角φ
ez"=ez' cosθ+ex' sinθ
ex"=(ex' cosθ-ez' sinθ)cosφ+sinφey'
ey"=-(ex' cosθ-ez' sinθ)sinφ+cosφey'
ez'=ez
ex'= cosα ex + sinα ey
ey'=-sinα ex + cosα ey
记M为
cosθcosφ sinφ -sinθcosφ
-cosθsinφ cosφ sinθsinφ
sinθ 0 cosθ
N为
cosα sinα 0
-sinα cosα 0
0 0 1
这样若记转动前后坐标为R(x,y,z),R'(x',y',z')
则 R=R'MN
由于坐标约束在球面上实际三坐标变换只有两组是独立的方程,但有三个独立变量,故解应该为无穷。
注:先前没考虑角度α,故认为可解了。
-------------------------------------------------------
不用矩阵求解:
如图G为AB中点,坐标{(x1+x2)/2, (y1+y2)/2, (z1+z2)/2 }
转动轴OM={xm,ym,zm}
M在AB中垂面上
xm(x1-x2)+ym(y1-y2)+zm(z1-z2)=0
OM⊥MG
xm[xm-(x1+x2)/2]+ym[ym-(y1+y2)/2]+zm[zm-(z1+z2)/2]=0
满足上面两个条件都可行,可知只给转变前后坐标没法定出转动轴。
关于这个问题我谈一谈我的看法,球面上的任意一点用球坐标(θ,φ)(球的半径为R是确定的)两个参数表示,球旋转的时候,首先要确定一根旋转轴(θ0,φ0)表示旋转的一个角度可以用θ1表示出来,现在球的旋转,其实换一种说法就是球面坐标的旋转,知道了旋转后两点的坐标,那么球的旋转情况是有很多种的,但是所有的坐标又都是确定的,这样可以通过旋转后的两点,得到任意一种情况下的旋转轴和旋转角度,这样其他的点就可以通过旋转轴和旋转角度表示出来,这中间必然涉及到三角函数的知识,如果要解方程的,那么可以把方程发给我,我会用MATLAB(关于解方程的和计算的你可以发给我);关于具体的你就自己做吧,由于时间比较忙所以不能把完整的解题给你。
现在我写一下我的解题思路
首先:任何一次绕中心轴的旋转,均可以转化为绕x轴的一次旋转和绕z轴的一次旋转得到,这样可以把不规则的旋转转化为规则的旋转,使问题得到简化现在我把点M1(x1,y1,z1)旋转到点M2(x2,y2,z2)的过程按上面的过程分为两步来旋转,首先我以x轴为旋转轴把M1(x1,y1,z1)旋转到与M2(x2,y2,z2)有相同的纬度,这时,经过第一次旋转后的点变为M3(x1,(R^2-x1^2-z2^2)^0.5,z2),(解释下这个点的得来,因为是绕x轴旋转,所以旋转过程中旋转点的x坐标保持不变即横坐标为x1,又由于旋转后与M2(x2,y2,z2)有相同的纬度,那么旋转后的点的竖坐标变为z2,由于点在球面上所以得到y轴上的纵坐标为(R^2-x1^2-z2^2)^0.5,这里取正和取负没有影响,)通过这次绕x轴的旋转(以及旋转后的两点),我们可以得到一个旋转角度θx,由于M3与M2在同一个纬度,所以把M3绕z轴旋转至与M2重合,这时可以通过M3—>M2的绕z轴旋转,得到一绕z轴的旋转角度θz;这样知道了θz与θx,那么对于任何一个点M4(x3,y3,z3)通过绕x轴旋转一个角度θx,在绕z轴旋转一个角度θz,得到与M4对应的点M5(x4,y4,z4);
现在我把我的解题过程以及思路都说清楚了,如果你明白了这个过程那么我具体来写出这个问题
的解题过程
为了使解题的过程更加的简化,理所当然的采用
球面坐标系,不过这里我们要用两种球面坐标系
一种是以z轴为中心轴的球面坐标系,这也是我们常用的球面坐标系,一种是以x轴为中心轴的球面坐标系(与z轴为球面的坐标系定义差不多),这两种坐标系与直角坐标系的转化情况是
以z轴为中心时(θ—>(0,2*pi),φ->(0,pi)),(φ,θ)->R*(cos(θ)sin(φ),sin(θ)sin(φ),cos(φ))=(x,y,z),以x为中心轴时)),(φ,θ)->R*(cos(φ),cos(θ)sin(φ),sin(θ)sin(φ))=(x,y,z),(说一下如果你懂矩阵的相关知识的话那么可以定义两个变换矩阵R1,R2,这样问题就可以更加好的表达出来,现在假设你不太了解矩阵的相关理论知识,就用初等的方法来做)
现在我们知道了直角坐标系在这两种坐标下面的坐标变换公式,因此下面我们将要用上面的公式讲不同坐标系下的坐标进变换,以利于我们的计算简化,和解题思路的表达更加简介
下面的解题思路就非常简单了:
首先确定两次选装的旋转角θx,φz
先把M1(x1,x2,x3),M2(x2,y2,z2)变换到以x为中心轴的球面坐标系中M1(θx1,φx1)和M2(θx2,φx2)显然旋转角θx=θx2-θx1;
这个时候M1旋转后的点变为M3(θx2,φz1)现在把M3划为直角坐标系M3(x3,y3,z3),接下来再把M3,M2划为以z轴为中心 轴的的球面坐标系M3(θz3,φz3)和M2(θz2,φz2),这是我们在绕z轴旋转使M3与M2重合,这是我们求出了θz=θz3-θz2;
现在我们知道了绕x轴的旋转角度和绕z轴的旋转角度,对于任意的一点M3利用求出的θx,θz通过上面的步骤,坐标变换,旋转,坐标变换,坐标变换,旋转,那么我们就可以得到M4(x4,y4,z4);
解答完毕;如果用矩阵的话那么每一次的变换都可以有一个变换矩阵,可以写成公式:不懂再问!
现在我用MATLAB界的答案为:(其中R为球面半径=(x1^2+y1^2+z1^2)^0.5);
x4=(1-sin(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))^2*x3^2/R^4)^(1/2)*cos(acos(1/2*x2*2^(1/2)/(y2^2)^(1/2))-acos(1/2*x1/R*2^(1/2)/((1-x1^2/R^2)*y2^2/(y2^2+z2^2))^(1/2))+acos((1-x3^2/R^2)^(1/2)*cos(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))/(x3^2/R^2+(1-x3^2/R^2)*cos(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))^2)^(1/2)));
y4=sin(acos(1/2*x2*2^(1/2)/(y2^2)^(1/2))-acos(1/2*x1/R*2^(1/2)/((1-x1^2/R^2)*y2^2/(y2^2+z2^2))^(1/2))+acos((1-x3^2/R^2)^(1/2)*cos(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))/(x3^2/R^2+(1-x3^2/R^2)*cos(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))^2)^(1/2)))*sin(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))*x3/R^2;
z4=sin(acos(y3/(y3^2+z3^2)^(1/2))+acos(y2/(y2^2+z2^2)^(1/2))-acos(y1/(y1^2+z1^2)^(1/2)))*x3/R^2;
老兄希望你满意啊!
是无穷解。因为你把(x1,y1,z1)->(x2,y2,z2)后可以按圆心到(x2,y2,z2)这个轴再旋转,因此无法确定转动。
只有(x1,y1,z1),(x2,y2,z2)是不能确定转轴和角度的,从1转到2有无穷种路径
肯定有人会做,就是在网上写过程,太麻烦了