已知空间中有一个平面(n,d),n为归一化后的法向量,和该平面上的一个点a(x,y,z),如何求出以a为圆心,半径为r,位于该平面上圆的方程?
类似于这么个效果,月球围绕地球的地轴公转,现在知道地球的地轴(法向量)和地球的位置(x,y,z),可以求出公转的这个面,假设公转轨道为圆形,我现在想求这个圆形轨道的方程。

解决方案 »

  1.   

    (x-a)2+(y-a)2+(z-a)2=r2
    2表示平方
      

  2.   

    有点进展,圆轨道半径r已知,圆心在(0,0,0),圆轨道的法线是v(a,b,c)已知,那根据垂直向量点乘=0和勾股定律可以得到这个圆轨道的方程组
    x^2+y^2+z^2=r^2
    a*x+b*y+c*z=0
    这方程各位看看是不是没问题?如果没问题,那问题就是我要求这个方程组的2个解,如何求?
      

  3.   

    A(x-x0)+B(y-y0)+C(z-z0)=0 点法式
     然后到
     a点 距离等r的方程联立 化简就行了
      

  4.   

    感谢楼上各位回复,还是我的原始思路不对,经同事指点看了MS的DXUT框架里面摄像机部分的源代码,这个问题现在已经解决了,可以先在y=0这个水平面上生成一个圆,再使用四元数通过角度计算出旋转矩阵把这个圆变换到正确的位置,以前我的思路是在y=0这个水平面上生成圆后,一定要求出与公转向量垂直的一个旋转向量从而求出旋转矩阵把这个圆变换到旋转轨道的重合位置,而这个旋转向量在轨道圆上,所以首先要求出一个轨道上的点才能求出这个旋转向量,结果就卡在这里了。另外,用什么方法求
    x^2+y^2+z^2=r^2
    a*x+b*y+c*z=0(其中a,b,c,r都已知)
    这个方程组的一个解比较高效一点?
      

  5.   

    我本来的问题和提问实际有点差别,提问中我假设地球在世界原点,而本来的问题是地球不在原点,地球也同时在围绕太阳公转,原点在太阳,这样提问我是为了把问题简化,因为不管地球在哪,求公转方程的思想是一样的,免得其他一些问题干扰回答问题的人的思路。
    现在这个问题已经解决了,需要把月亮公转拆分成2次变换,一次是地球和月亮一起围绕太阳的旋转,一次是月亮围绕地球的旋转,两次位移-旋转的矩阵一乘就是最终的位移-旋转矩阵,求月亮绕地球的旋转矩阵有2个办法,一是可以根据旋转轴向量求出轨道平面的三个欧拉角,然后D3D有个函数直接可以从一个四元数生成旋转矩阵。另外一个方法,直接把公转轴的z分量设为0,求绕轴旋转的旋转矩阵就可以了,虽然起始的位置变了,但最终的公转效果是一样的,我现在用的是这个方法,最简单,但局限就是公转轴向量必须有一个分量是0,否则月亮虽然是在绕旋转轴旋转,但中心就不是在地球了,而是旋转轴上的另外一个点。这两种方法都不用求解那个轨道方程了,但撇开D3D的世界变换方法,按正常思维来说,求解那个轨道方程还是一般方法,所以我还是想知道如编写代码求那个方程组的一个解(实际是2个解,因为0,0,0肯定是一个解),必定编译器不会化简方程。我现在的一个思路是,是不是可以根据系数确定一个解的范围然后用穷举法求一个近似解,这样显然效率非常低,有人说用matlib很容易求解,一来我没用过matlib库,二来matlib肯定也是用了什么算法求的解吧。