Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在3D中计算圆的切线?_Java_Trigonometry_Geometry_Processing - Fatal编程技术网

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

Java 如何在3D中计算圆的切线?,java,trigonometry,geometry,processing,Java,Trigonometry,Geometry,Processing,我需要帮助来计算三维空间中圆的切线,这是我到目前为止得到的 切线用蓝线表示,这是我从朋友那里得到的计算切线的方法 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; }

我需要帮助来计算三维空间中圆的切线,这是我到目前为止得到的

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

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 );
  }
}
两个点之间的Vec3D GetTangent(Vec3D p1,Vec3D p2){ Vec3D r=新的Vec3D(p1.x-p2.x, p1.y-p2.y, p1.z-p2.z); r、 规范化(); 返回r; } void getTangents(){ Vec3D-p0,p1; 对于(int i=1;i<曲线长度+1;i++){ p0=点[i%曲线长度]; p1=点[(i+1)%curve_length]; 切线[i%曲线长度]=两点之间的GetTangent(p0,p1); } }
任何帮助都将非常感谢

基本上,你可以找到从你需要的点到圆心的切线的向量,并取该向量的叉积以及圆的法线(取圆心的2个点加上圆心得到一个平面方程)


如果你对叉积进行规格化,你会得到该点的法向量/切向量。

基本上,你会找到从需要切线的点到圆心的向量,并得到该向量的叉积和圆的法向量(取圆的两个点加上圆心,得到一个平面方程)


如果对该叉积进行规格化,则得到该点的法线/切线向量。

在代码中用i-1替换i:

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

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

在代码中用I-1替换I:

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

我假设你的点在圆上的间隔相等,因此上一点和下一点之间的直线将平行于当前点的切线。

作为旁注:
I
最好是
I作为旁注:
I
最好是
I