28. Алгоритм Робертса. Удаление отрезков, экранируемых другими телами. - p1xelse/CG GitHub Wiki

Этап 2. Удаление невидимых ребер, экранируемых другими телами сцены.

Сначала с позиции оптики объясним ситуацию в каком случае мы не будем видеть ребра других тел, а затем перейдем к математическому описанию.

Обозначим местонахождение нашего наблюдателя. Наблюдатель находится в +бесконечности оси Z. Обратите внимание, если на первом этапе мы использовали вектор взгляда, то на втором этапе используем координаты точки, в которой находится наблюдатель. g = ( 0 0 1 0) показываем, наблюдатель находится на оси Z +inf.

Чтобы определить будем ли мы видеть какую то точку расположенную на ребре, можно пустить световой луч, используя свойство обратимости световых лучей. Значит источником следует считать не источник света, а глаз наблюдателя. Если наблюдатель находится в бесконечности, значит световые лучи будут распространяться параллельно оси Z. Если наблюдатель находится на конечном расстоянии, значит будут не параллельно.

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

Далее переходим к математике
Записываем в параметрической форме уравнение рассматриваемого ребра, т.е нашего отрезка p(t) = P1+(P2-P1)t 0<=t<=1.
Уравнение луча(уравнение плоскости, проходящей через отрезок и луч):
Q(t,alpha) = P(t)+ alpha * g , alpha >= 0 (это ограничение означает, что наблюдатель находится перед телом)
P(t) - произвольная точка на рассматриваемом отрезке, которую соединяем с точкой наблюдения. Варьируя коэффициент alpha, на этом луче получаем произвольную точку.

H = Q*V, hj>0 j=1,n где n -кол во граней тела.
Для каждой компоненты вектора H мы должны потребовать положительного значения. Невидимой точке ребра P1P2 соответствует такие значения параметров t и alpha, при которых выполняются все неравенства. *задача линейного программирования.

Система неравенств задает область допустимых решений. Все точки расположенные внутри области дают координаты невидимых точек отрезка. Нам надо найти в этой области минимальное и максимальное значение параметра t. Легко задача решается графически. Сначала надо построить область допустимых решений. Для этого от неравенств переходим к равенствам. Каждое равенство будет определять прямую. Совокупность пересекающихся прямых даст многоугольник области допустимых решений. В этой области найти минимальные и максимальные значения параметра t. t->min и t->max.

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

Пример

image image

Этап 3. Удаление линий пересечения тел, экранируемых самими телами, связанными отношением протыкания и другими телами

image

последовательность действий:

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

ВОПРОСЫ КУРОВА НА ЭКЗЕ

Он просит четкую словесную формулировку что нам надо сделать и каким образом мы к этому всему приходим.

Спрашивает почему неравенства больше 0

Разберитесь с лучом(Н) и особенно альфой(для решения какой задачи нужно будет ставить альфа равную 0)

Что такое вектор g(который наблюдатель)

Формирование матрицы тела(обязательно скажите, что ее нужно формировать правильно. Проверка на такую правильность это мы берем точку внутри многоугольника и умножаем ее на матрицу тела, результирующий вектор должен быть положительным)

Вообще основной вопрос был на формулировку задачи, я так и не понял че он хочет, но должно быть четко все обозначено, можете на консультации об этом спросить