Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2009, 15:37   #1
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию Определить видимость грани многоугольника

Нужно вывести на экран фигуру многоугольника, причем невидимые линии не должны быть отрисованы. Всю голову сломал. Пробовал тупо опрелять видимость точек и потом при отрисовке ребра проверять, если он содержит невидимую точкУ, то не рисовать. Но это подъходит к очень частной задаче. Есть положения когда все точки видны, но не все ребра видны . Подскажите алгоритм.
Sergey2 вне форума Ответить с цитированием
Старый 26.06.2009, 18:01   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

из начертательной геометрии известно, что из двух конкурирующих точек видима та, проекция которой на другую координатную плоскость лежит дальше от оси координат. Отсюда и определяется видимость точек, отрезков и т.д.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 26.06.2009, 18:26   #3
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Это все верно.... помню я начертательную геометрию, но это не совсем то что нужно.
Мои размышления привели меня к следующему - если нормаль из центра фигуры к грани (поверхности) состовляет острый угол с линией к наблюдателю, значит грань не видна. Соотсветсвенно. Ща рисую формулы для всего этого. Как попроще узнать угол между двумя линиями, если эти линии заданы точками?
Sergey2 вне форума Ответить с цитированием
Старый 26.06.2009, 18:49   #4
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

с нормалями разобрался. Осталось найти угол между отрезками. Можно как-нить это сделать попорще, а не раскладывать это все в проекции, строить перпендикуляры и отношения сторон считать?
Sergey2 вне форума Ответить с цитированием
Старый 26.06.2009, 20:46   #5
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

пипец. Исписал 7 старниц формата А4 мелким подчерком с двух сторон, где попутно доказал пару доказанных теорем (которые забыл и пришлось самому выводить), три часа работы привели к тому что я лох.
Вообщем если грани фигуры являются "правильными" многоугольниками и центр вращения в начале координат, то достаточно определить значение "глубины" точки, в которую опущена нормаль из центра вращения, т.е координату Z. Если она больше нуля, то сторона видна, если нет, то не видна.
Нормаль из центра опускается очень просто. Складываем все координаты Х точек многоугольника грани и делим на кол-во точек. Тоже самое с Y и Z. Потом надо узнать угол между нормальню и осью на пользователя.
cos(MON)=[(x3-x1)*(x3-x2)+(y3-y1)*(y3-y2)+(z3-z1)*(z3-z2)]/[|MO|*|ON|]
Так как вершина угла у нас в нуле, то половину сокращаем. Так как ось на зрителя у наз X и Y имеют нулевые - сокращаем еще одну половину. Причем нам не нужен угол как таковой - у осрого угла (меньше 90 градусов) косинус положительный. Т.е. надо узнать знак. Модули отрезков тоже сокращаем, так как они всегда положительные и остаеться только Z.
Это, кстати, и так можно представить - если нормаль в ближней полусфере, то грань видна.

PS Почти доказал теорему Ферма
Sergey2 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видимость констант tae1980 Microsoft Office Excel 5 23.11.2009 12:06
Видимость полей в подчиненной форме Sparxy Microsoft Office Access 2 02.06.2009 21:40
Видимость переменных tae1980 Microsoft Office Excel 3 26.03.2009 18:34
Определение площади многоугольника Bayazet Помощь студентам 5 17.02.2009 12:48
Необходимо определить периметр многоугольника, заданного координатами вершин Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 6 23.12.2008 12:30