Создайте прямоугольную сетку из трех векторов3 - PullRequest
0 голосов
/ 13 мая 2019

У меня есть три вектора3, и мне нужно создать прямоугольную сетку из них.

С

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

Я получаю самолет, но это не то, что я ищу. У меня уже есть код для создания сетки, но у меня проблемы с поиском отсутствующего Vector3. Я много искал на форумах и в документах Unity, но не нашел указаний на это.

У вас есть какие-нибудь ссылки, чтобы подсказать мне, как найти это значение?

1 Ответ

1 голос
/ 13 мая 2019

Вот мой метод, который я набросал за минуту:

enter image description here

Вам нужно пройтись по трем пунктам, чтобы выяснить, какиеточка образует 90 с двумя другими точками, так как это противоположно 4-й точке.Эта точка называется 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 дает ожидаемые результаты для тестов, которые я провел.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...