Задать вопрос
@gelosoft
Frontend-developer

Как повернуть шестиугольник по меньшему углу чтобы самая длинная хорда(соединяющая противоположные точки) оказалась параллельно оси?

Есть шестиугольник(он с толщиной, т.е не плоская фигура), надо как то получить его вершины, определить длинную хорду и повернуть его параллельно 0X (глобальной) по меньшему углу.
64df97cb35864f06b6ed39f4601f7a34.pngfc2bd0dfeb0245b39bd0024089b8f9c4.png
Я делаю всю эту механику в Babylon.js, но примеры из TREE.js тоже должны помочь.
  • Вопрос задан
  • 174 просмотра
Подписаться 1 Оценить 11 комментариев
Решения вопроса 1
@gelosoft Автор вопроса
Frontend-developer
const vertices = mesh.getVerticesData(BABYLON.VertexBuffer.PositionKind);
let vectorExtreme = null;
let length = 0;
for(let i = 0; i < vertices.length; i += 3) {
    let vertex = BABYLON.Vector3.FromArray(vertices, i);
    let vector = BABYLON.Vector3.TransformCoordinates(vertex, this.hexagon.mesh.getWorldMatrix());
    if(!i) vectorExtreme = vector;
    vector.z = 0;
    if(vector.length() > length && vector.x > 0) {
        length = vector.length();
        vectorExtreme = vector;
    }
}

const vector1 = new BABYLON.Vector3(vectorExtreme.x, vectorExtreme.y, 0);
const vector2 = new BABYLON.Vector3(1,0,0);

let angle = Math.acos(BABYLON.Vector3.Dot(vector1, vector2) /
    (vector1.length() * vector2.length()));
if(vectorExtreme.y > 0) {
    angle = -angle;
}

mesh.rotate(BABYLON.Axis.Z, angle, BABYLON.Space.WORLD);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы