如何在3D中计算圆的切线?

时间:2011-05-08 15:51:05

标签: java trigonometry geometry processing

我需要帮助来计算3D空间中圆的tanget,这是我到目前为止所拥有的 enter image description here

enter image description here

切线用蓝线表示,这是我从朋友那里计算出来的方法

Vec3D getTangentBetweenTwoPoint( Vec3D p1, Vec3D p2 ) {
Vec3D r = new Vec3D( p1.x - p2.x,
                     p1.y - p2.y,
                     p1.z - p2.z );
  r.normalize();
  return r;
}

void getTangents() {
  Vec3D p0, p1;
  for ( int i = 1; i < curve_length + 1; i++ ) {
    p0 = points[i % curve_length];
    p1 = points[(i+1) % curve_length];
    tangents[i % curve_length] = getTangentBetweenTwoPoint( p0, p1 );
  }
}

非常感谢任何帮助

2 个答案:

答案 0 :(得分:4)

基本上,你可以从你需要切线到圆心的点找到矢量,然后取该矢量的叉积以及圆的法线(你可以通过得到圆的2个点加上中心产生一个平面方程)。

如果您对该叉积进行标准化,则会得到该点的法线/切线向量。

答案 1 :(得分:0)

在代码中将i替换为i-1:

p0 = points[(i-1) % curve_length];

我假设您的点在圆上的间距相等,因此前一个点和下一个点之间的线将与当前点的切线平行。