从三个vector3创建一个矩形网格

时间:2019-05-13 00:25:02

标签: c# unity3d

我有三个vector3,需要从它们创建一个矩形网格。

使用

var plane = new Plane(Vector3_1, Vector3_2, Vector3_3);

我得到了飞机,但这不是我想要的。 我已经有创建网格的代码,但是找不到丢失的Vector3有麻烦。我在论坛和Unity文档中进行了很多搜索,但没有找到相关迹象。

您是否有任何链接告诉我找出如何找到该值?

1 个答案:

答案 0 :(得分:1)

这是我在一分钟内勾勒出的方法:

enter image description here

您将需要遍历这三个点,以找出哪个点与其他两个点形成90,因为这与第四个点相对。该点在图中称为P,而A和B是另外两个点。

从这里我们可以简单地将A和B加P减得到第4点。

以下是一些粗略的代码:

public Vector3 Find4th(Vector3 a, Vector3 b, Vector3 c) {

    Vector3 point, cornerA, cornerB;

    Vector3[] points = new Vector3[] {a, b, c};
    float angleDelta = 180;
    int pointIndex = -1;

    //find point with angle closest to 90 degrees
    for (int i = 0; i < 3; ++i) {
        point = points[i];

        cornerA = points[i != 0 ? i-1 : 2];
        cornerB = points[i != 2 ? i+1 : 0];

        Vector3 lineA = cornerA - point;
        Vector3 lineB = cornerB - point;

        float ang = Mathf.Abs(Vector3.Angle(lineA, lineB)-90);

        if (ang < angleDelta) {
            angleDelta = ang;
            pointIndex = i;
        }
    }

    point = points[pointIndex];
    cornerA = points[pointIndex != 0 ? pointIndex-1 : 2];
    cornerB = points[pointIndex != 2 ? pointIndex+1 : 0];

    return cornerA + cornerB - point;
}

我的测试脚本https://pastebin.com/mKhNq9ZD为我运行的测试产生了预期的结果。