我需要帮助来计算3D空间中圆的tanget,这是我到目前为止所拥有的
切线用蓝线表示,这是我从朋友那里计算出来的方法
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 );
}
}
非常感谢任何帮助
答案 0 :(得分:4)
基本上,你可以从你需要切线到圆心的点找到矢量,然后取该矢量的叉积以及圆的法线(你可以通过得到圆的2个点加上中心产生一个平面方程)。
如果您对该叉积进行标准化,则会得到该点的法线/切线向量。
答案 1 :(得分:0)
在代码中将i替换为i-1:
p0 = points[(i-1) % curve_length];
我假设您的点在圆上的间距相等,因此前一个点和下一个点之间的线将与当前点的切线平行。