создать точки, параллельные углам треугольника - PullRequest
1 голос
/ 03 октября 2019

Допустим, у меня есть этот треугольник (темно-синий), и я знаю, что это вершины (красный): (1,3,0) (0,4,0) (-1,3,0)

Теперь я хочу создать новые точки (желтые) над их вершинами, но параллельно треугольнику. В этом случае это просто: просто добавьте значение y, и вы его получите.

enter image description here

Но что, если треугольник не направлен вверх? например: (1,3,0) (0,4,1) (-1,3,0)

enter image description here

Я получил его-Вектор (зеленая линия), и я думаю, что я должен использовать его для создания этих параллельных точек, но я не знаю, как ... Я ищу способ сделать это для нескольких треугольников программно, которые расположены во всех видахпути. Есть идеи?

@ Бен Уитмор

var v1 = new THREE.Vector3(0,4,1);
var v2 = new THREE.Vector3(1,3,0);
var v3 = new THREE.Vector3(-1,3,0);

var c = new THREE.Vector3( );
c.crossVectors( v2, v3 ) // { x: 0, y: -0, z: 6 }
c.normalize() // { x: 0, y: -0, z: 1 }

sphere.position.set( ??? );`

1 Ответ

1 голос
/ 03 октября 2019

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

. Есть, конечно, дванаправления, которые может принимать вектор, чтобы быть перпендикулярными плоскости: он может указывать «выше» плоскости или «ниже» плоскости. Какое направление вы получите, будет зависеть от направления вектора треугольника по часовой стрелке / против часовой стрелки. Если это не то направление, которое вы хотите, просто переверните его.

...