gpt4 book ai didi

c# - 将 Python 转换为 Unity C# - 数学或如何找到 3D 空间中两条斜线之间的最短距离

转载 作者:太空宇宙 更新时间:2023-11-03 18:31:35 26 4
gpt4 key购买 nike

我想如果我明白了什么就足够了

np.linalg.norm(A)
np.linalg.det([t, _A, cross])
np.cross(_A, _B)

确实

Python 代码已创建 here 6.@Fnord 的回答

我正在看他们的 doc ,但我无法理解它比 MSDN doc 中更糟糕的事情。

编辑:

我删除了我的代码,因为我的假设完全错误。

即使我原来的问题没有得到解答,我原来的问题也得到了解决。

问题:

如何在 3D 中找到两条倾斜线之间的 2 个最近点

这个gr8 tutorial如果我了解如何以编程方式学习 t 和 s 是什么,可能会对我有所帮助。

最佳答案

您不需要重写这些方法,因为已经内置了等效的方法。

例如,要获取两个 3 维向量之间的距离,可以使用 Vector3.Distance ( Unity entry )

float distance = Vector3.Distance(someVector, anotherVector);

如果您想找到两个最近的点,您应该也可以使用其他矢量方法来完成此任务。

以下示例演示了如何使用这些方法查找两条差异线上的最近点 ( taken from the Unity wiki )。它仍然使用行列式来计算。要解释其原理,您需要了解向量的基本线性代数。

//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;
}
}

关于c# - 将 Python 转换为 Unity C# - 数学或如何找到 3D 空间中两条斜线之间的最短距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com