为圆弧定义一个圆圈的函数

时间:2010-09-27 21:25:31

标签: geometry trigonometry space

我需要一个能够以三维方式返回圆上的点的函数。

圆圈应“盖住”由A点和B点定义的线段及其半径。每个帽垂直于线段。并以其中一个端点为中心。

Here is a shitty diagram

2 个答案:

答案 0 :(得分:1)

设p是从A到B的方向上的单位矢量,即N =(B-A)/长度(A-B)。第一步是找到另外两个向量X和Y,使{N,X,Y}成为基础。这意味着您需要两个以上的向量,以便所有{N,X,Y}对彼此垂直,并且它们也都是单位向量。考虑这个问题的另一种方法是,您要创建一个新的坐标系,其x轴与线段对齐。您需要找到指向y轴和z轴方向的矢量。

请注意,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];