Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Додекаэдр с непрозрачными гранями, Удаление скрытых линий 
:(
    Опции темы
Ramzai
Дата 14.4.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.6.2004
Где: Москва

Репутация: нет
Всего: нет



Построил додекаэдр, у к-рого 20 точек (x, y, z) - перемещается в пр-ве параллельным переносом и поворотом вокруг осей. Вопрос, как в каждый момент времени определить, какие ребра не рисовать. ИМХО что-то сложное вроде z-буфера здесь не надо, а есть что-то простое для частного случая. Заранее спасибо
PM MAIL   Вверх
Void
Дата 14.4.2005, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λ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
PM MAIL WWW GTalk   Вверх
Ramzai
Дата 14.4.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 6.6.2004
Где: Москва

Репутация: нет
Всего: нет



Да, проволочная модель. Каждая из 20 вершин - запись (x, y, z) + 3 указателя на индексы соседних вершин. Про параллельный перенос я погорячился, только поворот вокруг осей по формулам (для оси X):
Код

a[i].Y := y * cos(angle) - z * sin(angle); 
a[i].Z := z * cos(angle) + y * sin(angle); 

Вывод на экран - просто X, Y (в соотв. область).
Чем мне не нравится предложенное: вычисление нормали должно учитывать направление нормали, так? По трем точкам - помимо чисто математических формул нужны еще какие-то дополнительные управляющие конструкции, определяющие направление нормали. Луч зрения наблюдателя - вообще как-то себе слабо представляю (в моем случае по оси Z что-ли?)
В общем, нельзя как-нибудь использовать то, что центр додекаэдра - (0, 0, 0) и z-координаты вершин?
Заранее спасибо.

PM MAIL   Вверх
DENNN
Дата 15.4.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Цитата(Ramzai @ 14.4.2005, 19:11)
вычисление нормали должно учитывать направление нормали, так

Несовсем. Порядок обхода вершин на всех гранях должен быть одинаквым. Т.е., к примеру, для каждой грани все вершины перечислятся по порядку против часов стрелки. ТОгда "ориентированную" нормаль к грани можно получить просто выполнив векторное произведение двух сосдених ребер.

Цитата(Ramzai @ 14.4.2005, 19:11)
В общем, нельзя как-нибудь использовать то, что центр додекаэдра - (0, 0, 0) и z-координаты вершин?

Если хочется изврата, то конечно. smile Например для каждой точки проверить тот факт, что как минимум 1/2 всех вершин имеют более маленькое значение Z. Но этот метод будет давать сбои.
PM ICQ   Вверх
maxim1000
Дата 15.4.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата
В общем, нельзя как-нибудь использовать то, что центр додекаэдра - (0, 0, 0) и z-координаты вершин?

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


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.