![]() |
|
![]() ![]() ![]() |
|
Ramzai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 6.6.2004 Где: Москва Репутация: нет Всего: нет |
Построил додекаэдр, у к-рого 20 точек (x, y, z) - перемещается в пр-ве параллельным переносом и поворотом вокруг осей. Вопрос, как в каждый момент времени определить, какие ребра не рисовать. ИМХО что-то сложное вроде z-буфера здесь не надо, а есть что-то простое для частного случая. Заранее спасибо
|
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 3 Всего: 173 |
Додекаэдр рисуется проволочной моделью (только ребра) ? Тогда это можно сделать так: вычисляются нормали ко всем граням додекаэдра, затем определяется угол м/у нормалью каждой грани и лучом зрения наблюдателя. Если угол острый (т.е. скалярное произведение положительно), то соответствующая грань видима, если тупой (отрицательно) - то невидима. Дальше все просто - видимы те ребра, у которых хотя бы одна образующая их грань видима.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Ramzai |
|
|||
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 6.6.2004 Где: Москва Репутация: нет Всего: нет |
Да, проволочная модель. Каждая из 20 вершин - запись (x, y, z) + 3 указателя на индексы соседних вершин. Про параллельный перенос я погорячился, только поворот вокруг осей по формулам (для оси X):
Вывод на экран - просто X, Y (в соотв. область). Чем мне не нравится предложенное: вычисление нормали должно учитывать направление нормали, так? По трем точкам - помимо чисто математических формул нужны еще какие-то дополнительные управляющие конструкции, определяющие направление нормали. Луч зрения наблюдателя - вообще как-то себе слабо представляю (в моем случае по оси Z что-ли?) В общем, нельзя как-нибудь использовать то, что центр додекаэдра - (0, 0, 0) и z-координаты вершин? Заранее спасибо. |
|||
|
||||
DENNN |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Несовсем. Порядок обхода вершин на всех гранях должен быть одинаквым. Т.е., к примеру, для каждой грани все вершины перечислятся по порядку против часов стрелки. ТОгда "ориентированную" нормаль к грани можно получить просто выполнив векторное произведение двух сосдених ребер.
Если хочется изврата, то конечно. ![]() |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
можно и очень просто берем просто среднее арифметическое всех вершин выбранной грани - получаем вектор я точно не помню додекаэдра, вполне возможно, что это и будет нормаль но в любом случае этот вектор будет идти наружу фигуры, а значит, нормаль можно выбрать такую, чтобы угол между ней и этим вектором был острый... -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |