将Python翻译成Unity C#-数学或如何在3D空间中找到两条斜线之间的最短距离
我想如果我明白了什么就足够了将Python翻译成Unity C#-数学或如何在3D空间中找到两条斜线之间的最短距离,c#,python,numpy,unity3d,code-translation,C#,Python,Numpy,Unity3d,Code Translation,我想如果我明白了什么就足够了 np.linalg.norm(A) np.linalg.det([t, _A, cross]) np.cross(_A, _B) 做 Python代码创建6。@Fnord的答复 我在看他们的照片,但我不明白有什么比这更糟糕的了 编辑: 我删除了我的代码,因为我的假设完全不正确 即使我原来的问题没有得到回答,我原来的问题也解决了 问题: 如何在3D中找到两条斜线之间的最近点 如果我了解如何通过编程学习t和s是什么,这个gr8本可以帮助我。您不需要重写这些方法,因为已
np.linalg.norm(A)
np.linalg.det([t, _A, cross])
np.cross(_A, _B)
做
Python代码创建6。@Fnord的答复
我在看他们的照片,但我不明白有什么比这更糟糕的了
编辑:
我删除了我的代码,因为我的假设完全不正确
即使我原来的问题没有得到回答,我原来的问题也解决了
问题:
如何在3D中找到两条斜线之间的最近点
如果我了解如何通过编程学习t和s是什么,这个gr8本可以帮助我。您不需要重写这些方法,因为已经有了内置的等效方法 例如,要获取两个三维向量之间的距离,可以使用
Vector3.distance
()
如果你想找到两个最近的点,你应该能够完成这一点使用其他矢量方法以及
下面是一个如何使用这些方法在两条差线上找到最近点的示例()。它仍然使用行列式来计算。为了解释为什么这样做,您需要了解向量的基本线性代数
//Two non-parallel lines which may or may not touch each other have a point on each line which are closest
//to each other. This function finds those two points. If the lines are not parallel, the function
//outputs true, otherwise false.
public static bool ClosestPointsOnTwoLines(out Vector3 closestPointLine1, out Vector3 closestPointLine2, Vector3 linePoint1, Vector3 lineVec1, Vector3 linePoint2, Vector3 lineVec2){
closestPointLine1 = Vector3.zero;
closestPointLine2 = Vector3.zero;
float a = Vector3.Dot(lineVec1, lineVec1);
float b = Vector3.Dot(lineVec1, lineVec2);
float e = Vector3.Dot(lineVec2, lineVec2);
float d = a*e - b*b;
//lines are not parallel
if(d != 0.0f){
Vector3 r = linePoint1 - linePoint2;
float c = Vector3.Dot(lineVec1, r);
float f = Vector3.Dot(lineVec2, r);
float s = (b*f - c*e) / d;
float t = (a*f - c*b) / d;
closestPointLine1 = linePoint1 + lineVec1 * s;
closestPointLine2 = linePoint2 + lineVec2 * t;
return true;
}
else{
return false;
}
}
这并不意味着“正常化”。Numpy在计算两条直线向量之间的叉积,然后在此基础上计算矩阵范数和行列式。你能帮我把这个方法转换成Unity C#吗?那不是直线,而是两个完全不同的点。虽然我不使用Unity,它表示
Vector3
类型用于三维向量和点。在该页面上,它列出了规格化
和交叉积
,如果您确实觉得距离
不合适,可以在此处使用。直线是:2个向量或1个原点向量+1个方向向量,但在任何情况下都是2个向量。矢量3.距离仅减去2个矢量。当我处理4个向量时,每行2个。@MilitaryG:我明白了。我举了一个点之间距离的例子,如果你已经计算了最近的位置。我更新了我的帖子。非常感谢它的正常工作:)好吧,为了这个好答案,我将改变我的问题。即使我找到了我原来的Q的答案,但没有一个是正确的,或者甚至是在Python中,如果我可以,我会竖起大拇指,但我不能。希望复选标记能满足您的要求。
//Two non-parallel lines which may or may not touch each other have a point on each line which are closest
//to each other. This function finds those two points. If the lines are not parallel, the function
//outputs true, otherwise false.
public static bool ClosestPointsOnTwoLines(out Vector3 closestPointLine1, out Vector3 closestPointLine2, Vector3 linePoint1, Vector3 lineVec1, Vector3 linePoint2, Vector3 lineVec2){
closestPointLine1 = Vector3.zero;
closestPointLine2 = Vector3.zero;
float a = Vector3.Dot(lineVec1, lineVec1);
float b = Vector3.Dot(lineVec1, lineVec2);
float e = Vector3.Dot(lineVec2, lineVec2);
float d = a*e - b*b;
//lines are not parallel
if(d != 0.0f){
Vector3 r = linePoint1 - linePoint2;
float c = Vector3.Dot(lineVec1, r);
float f = Vector3.Dot(lineVec2, r);
float s = (b*f - c*e) / d;
float t = (a*f - c*b) / d;
closestPointLine1 = linePoint1 + lineVec1 * s;
closestPointLine2 = linePoint2 + lineVec2 * t;
return true;
}
else{
return false;
}
}