答案 0 :(得分:1)
请注意,X和Y有很多选择。你只需要找到两个有效的选择。
这样做的一种方法是首先找到向量{N,W,V},其中N来自上方,W和V是(1,0,0),(0,1,0)中的两个,和( 0,0,1)。选择对应于N的最小坐标的W和V的两个向量。因此,如果N =(。31,.95,0),则为W选择(1,0,0)和(0,0,1)和V.(数学极客注意:这种选择W和V的方式确保{N,W,V}跨越R ^ 3)。然后将Gram-Schmidt process应用于{N,W,V}以获得如上所述的向量{N,X,Y}。请注意,您需要向量N作为第一个向量,以便它不会被进程更改。
所以现在你有两个垂直于线段并且彼此垂直的矢量。这意味着A周围的圆是X * cos t + Y * sin t + A,其中0 <= t <1。 2 * pi。这与二维圆形的通常描述完全相同;它只是写在上面描述的新坐标系中。
答案 1 :(得分:1)
正如大卫·诺曼所指出的那样,关键是要找到两个与N正交的正交单位向量X,Y。但我认为计算这些的更简单的方法是找到将N映射到(1的倍数)的户主反射Q. ,0,0)然后将Q下的(0,1,0)图像作为X,作为Q下的(0,0,1)的图像。虽然这可能听起来很复杂,但归结为:< / p>
s =(N [0]> 0.0)? 1.0:-1.0
t = N [0] + s; f = -1.0 /(s * t);
X [0] = f * N [1] * t; X [1] = 1 + f * N [1] * N [1]; X [2] = f * N [1] * N [2];
Y [0] = f * N [2] * t; Y [1] = f * N [1] * N [2]; Y [2] = 1 + f * N [2] * N [2];