Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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
将Python翻译成Unity C#-数学或如何在3D空间中找到两条斜线之间的最短距离_C#_Python_Numpy_Unity3d_Code Translation - Fatal编程技术网

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