Задача: есть поверхность — координаты точек, треугольники.
Требуется: найти поверхность, отстоящую от данной на заданное расстояние. Не оболочку конечно — только смещение, но и не сдвиг по вектору (потому что расстояние будет неравномерным)
Интересует даже не столько сам алгоритм, сколько сроки решения в виде реализации в коде. Приблизительно...
Здравствуйте, YaTL, Вы писали:
YTL>Задача: есть поверхность — координаты точек, треугольники.
YTL>Требуется: найти поверхность, отстоящую от данной на заданное расстояние. Не оболочку конечно — только смещение, но и не сдвиг по вектору (потому что расстояние будет неравномерным)
Если поверхность выпуклая, то для каждых трех точек каждого треугольника находишь
1. уравнение плоскости (Ax+By+Cz+D = 0) — решение системы лин уравнений 3x3
2. уравнение плоскости, сдвинутой в направлении нормали на нужное расстояние d: (Ax + By + Cz + D + d = 0)
Ищешь пересечения полученных в п2 плоскостей, чтобы найти ребра
Ищешь пересечения ребер чтобы найти вершины сдвинутой поверхности
YTL>Интересует даже не столько сам алгоритм, сколько сроки решения в виде реализации в коде. Приблизительно... YTL>Какие мнения?
Здравствуйте, andyp, Вы писали:
A>Здравствуйте, YaTL, Вы писали:
YTL>>Задача: есть поверхность — координаты точек, треугольники.
YTL>>Требуется: найти поверхность, отстоящую от данной на заданное расстояние. Не оболочку конечно — только смещение, но и не сдвиг по вектору (потому что расстояние будет неравномерным)
A>Если поверхность выпуклая, то для каждых трех точек каждого треугольника находишь A>1. уравнение плоскости (Ax+By+Cz+D = 0) — решение системы лин уравнений 3x3 A>2. уравнение плоскости, сдвинутой в направлении нормали на нужное расстояние d: (Ax + By + Cz + D + d = 0)
A>Ищешь пересечения полученных в п2 плоскостей, чтобы найти ребра A>Ищешь пересечения ребер чтобы найти вершины сдвинутой поверхности
YTL>>Интересует даже не столько сам алгоритм, сколько сроки решения в виде реализации в коде. Приблизительно... YTL>>Какие мнения?
A>Писать немного.
Такой подход не гарантирует что результирующая поверхность будет отстоять на заданное расстояние.
Ребро — пересечение плоскостей — будет отстоять на заданное расстояние лишь от 2-х треугольников исходной поверхности.
Здравствуйте, YaTL, Вы писали:
YTL>Такой подход не гарантирует что результирующая поверхность будет отстоять на заданное расстояние. YTL>Ребро — пересечение плоскостей — будет отстоять на заданное расстояние лишь от 2-х треугольников исходной поверхности.
Все грани будут отстоять на заданное расстояние от исходных граней. Вершины разъедутся по новым граням. (Представь куб внутри куба, вершины "уедут" больше чем грани (по линии из центра массы куба до старой вершины))Это ли не то что надо?
Здравствуйте, andyp, Вы писали:
A>Здравствуйте, YaTL, Вы писали:
YTL>>Такой подход не гарантирует что результирующая поверхность будет отстоять на заданное расстояние. YTL>>Ребро — пересечение плоскостей — будет отстоять на заданное расстояние лишь от 2-х треугольников исходной поверхности.
A>Все грани будут отстоять на заданное расстояние от исходных граней. Вершины разъедутся по новым граням. (Представь куб внутри куба, вершины "уедут" больше чем грани (по линии из центра массы куба до старой вершины))Это ли не то что надо?
Антипример — усеченный триангулированный конус и поверхность отстоящая внутрь него на расстояние большее чем диаметр отсеченной окружности.
YTL>Интересует даже не столько сам алгоритм, сколько сроки решения в виде реализации в коде. Приблизительно...
YTL>Какие мнения?
Решение для эквидистантных контуров на плоскости, для контура заданного отрезками и окружностями, я писал несколько месяцев. Правда, не фулл-тайм, а по вечерам
Здравствуйте, YaTL, Вы писали:
YTL>Доброго времени суток...
YTL>Задача: есть поверхность — координаты точек, треугольники.
YTL>Требуется: найти поверхность, отстоящую от данной на заданное расстояние. Не оболочку конечно — только смещение, но и не сдвиг по вектору (потому что расстояние будет неравномерным)
YTL>Интересует даже не столько сам алгоритм, сколько сроки решения в виде реализации в коде. Приблизительно...
YTL>Какие мнения?
Если не требуется абсолютная точность, то можно сгенерировать поверхность методом марширующих кубиков, используя расстояние до исходной поверхности как целевую функцию алгоритма. Размером "кубика" регулируется степень детализации.
Здравствуйте, YaTL, Вы писали:
YTL>Антипример — усеченный триангулированный конус и поверхность отстоящая внутрь него на расстояние большее чем диаметр отсеченной окружности.
Не очень понял, но с "отстоянием внутрь" все плохо даже для выпуклых. Ну и ты бы точнее условия задачи поставил. Если нужно сохранить расстояние до гладкой поверхности в выбранных точках, то тогда информации о нормали в этих точках не хватает. Если речь уже о многограннике идет, то, очевидно, в вершинах и ребрах нормаль не определена (поверхность не гладкая).