Здравствуйте, Homunculus, Вы писали:
H>Здравствуйте, DziD, Вы писали:
H>Финальная версия алгоритма:
H>1) ищем ось вазы. То есть прямую. Для прямой в 3D надо задать точку и вектор.
H>Вектор оси симметрии — сумма всех нормалей всех треугольников. Найдя этот вектор, поворачиваем вазу так, чтоб этот вектор смотрел вниз (или вверх).
H>После этого ваза у нас стоит или на дне или дном вверх.
H>2) ищем габаритный бокс повернутой вазы. Центр этого габаритного бокса будет лежать на оси вращения вазы.
H> Нашли прямую.
H>Дальше этой прямой можно пересечь сам габаритный бокс. Но получим две точки, возможные центры дна. А нам нужна одна. Поэтому придется пересечь эту поямую с самими треугольниками вазы. Получим то, что ищем.
Не совсем понимаю, как вектор оси симметрии может быть равен вектору сумме всех нормалей. Я попробовал его посчитать, и пустить из центра, он улетел далеко и не по направлению оси
А в целом большое спасибо, направление куда ковырять понял.
Сейчас я могу определить вершины на выгнутом дне вазы (правда, пока она "правильно" ориентирована). Для этого я считаю нормали треугольников, и просто отсекаю все треугольники, которые не смотрят вниз. Далее выбираю (делю по подгруппам) все треугольники которые находятся рядом друг с другом, если получилась одна подгруппа, то значит мы попали в "дно", если несколько, то выбираю ту, у которых средняя координата высоты меньше...
Осталась проблема с ориентацией.