|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.06.2009, 15:37 | #1 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Определить видимость грани многоугольника
Нужно вывести на экран фигуру многоугольника, причем невидимые линии не должны быть отрисованы. Всю голову сломал. Пробовал тупо опрелять видимость точек и потом при отрисовке ребра проверять, если он содержит невидимую точкУ, то не рисовать. Но это подъходит к очень частной задаче. Есть положения когда все точки видны, но не все ребра видны . Подскажите алгоритм.
|
26.06.2009, 18:01 | #2 |
Форумчанин
Регистрация: 07.04.2009
Сообщений: 245
|
из начертательной геометрии известно, что из двух конкурирующих точек видима та, проекция которой на другую координатную плоскость лежит дальше от оси координат. Отсюда и определяется видимость точек, отрезков и т.д.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
|
26.06.2009, 18:26 | #3 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
Это все верно.... помню я начертательную геометрию, но это не совсем то что нужно.
Мои размышления привели меня к следующему - если нормаль из центра фигуры к грани (поверхности) состовляет острый угол с линией к наблюдателю, значит грань не видна. Соотсветсвенно. Ща рисую формулы для всего этого. Как попроще узнать угол между двумя линиями, если эти линии заданы точками? |
26.06.2009, 18:49 | #4 |
Форумчанин
Регистрация: 08.01.2008
Сообщений: 233
|
с нормалями разобрался. Осталось найти угол между отрезками. Можно как-нить это сделать попорще, а не раскладывать это все в проекции, строить перпендикуляры и отношения сторон считать?
|
26.06.2009, 20:46 | #5 |
Форумчанин
Регистрация: 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 Почти доказал теорему Ферма |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Видимость констант | 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 |