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

Я бы хотел получить точки треугольника вокруг точки, где грань будет указывать в направлении указанной нормали. Я буду использовать THREE.js, чтобы добавить их в BufferGeometry.

Очень грубый рисунок:

Please forgive this very crude drawing

Вот код, который у меня есть:

//The XYZ location of a point:
var x = model.points[i*3];
var y = model.points[i*3+1];
var z = model.points[i*3+2];


//The normal vector direction:
var nx = model.normals[i*3];
var ny = model.normals[i*3+1];
var nz = model.normals[i*3+2];

Как можно выбрать еще 3 точки вокруг этой точки, которые все перпендикулярны нормали и на одинаковом расстоянии от точки / друг друга?

СПАСИБО!

Ответы [ 3 ]

1 голос
/ 25 июня 2019

1) Возьмите кросс-произведение нормали с произвольным непараллельным вектором. Это даст вам вектор, перпендикулярный вектору нормали.

1.5) Нормализуйте и масштабируйте перпендикулярный вектор до желаемого размера. Длина этого вектора будет расстоянием от центроида треугольника до каждой из его вершин.

2) Поверните перпендикулярный вектор на 2PI / 3 и 4PI / 3 вокруг нормального вектора.

3) Добавьте 3 вектора к центральной точке.

0 голосов
/ 25 июня 2019

Вам нужно найти плоскость, параллельную нормали и содержащую точку (есть только одна), а затем выбрать любую точку в этой плоскости на указанном расстоянии и повернуть ее два раза на 120 градусов вокруг центральной точки.

0 голосов
/ 25 июня 2019

Обратите внимание, что существует бесконечно много треугольников, которые соответствуют вашим критериям, даже если мы ограничиваемся только равносторонними треугольниками. Это потому, что существует целая плоскость, которая перпендикулярна данному вектору <nx, ny, nz> через данную точку (x, y, z). Прочтите здесь , чтобы узнать, как вывести уравнение для этой плоскости. Оттуда вам нужно будет выбрать точку на плоскости. Затем вы можете вычислить две другие точки, вращая вокруг данной точки на (x, y, z).

...