Дипломы, курсовые, рефераты, контрольные...
Срочная помощь в учёбе

Алгоритм закрашивания полигона. 
Алгоритм, определяющий видимые и невидимые линии

РефератПомощь в написанииУзнать стоимостьмоей работы

Для каждой грани при инициализации объекта нужно посчитать вектор нормали, привести к единичной длине и сохранить его координаты в структуре соответствующей грани. Кроме того, при каждом повороте сцены векторы нормали нужно тоже пересчитывать (но перспективную проекцию находить не следует). А так как через три точки всегда можно провести плоскость (притом только одну) и число уравнений данной… Читать ещё >

Алгоритм закрашивания полигона. Алгоритм, определяющий видимые и невидимые линии (реферат, курсовая, диплом, контрольная)

Нахождение нормали по трем точкам

Пусть заданы три точки (т.к. через любые три точки можно провести плоскость), например A, B, C. Уравнение плоскости задается в виде:

nx x + ny y + nz z + d=0,.

где (nx, ny, nz) — координаты нормали к плоскости.

Получим систему уравнений:

nxx + nyy + nzz + d = 0.

nxA.x + nyA. y + nzA. z + d = 0.

nxB.x + nyB. y + nzB. z + d = 0.

nxC.x + nyC. y + nzC. z + d = 0.

В виде матрицы такая система запишется как:

|| xyz 1 ||.

|| A.xA.yA.z 1 ||.

|| B.xB.yB.z 1 || = 0.

|| C.xC.yC.z 1 ||.

Определитель будет равен (относительно первой строки):

|A.yA.z 1| |A.xA.z 1| |A.xA.y 1| |A.xA.y 1|.

x |B.yB.z 1| - y |B.xB.z 1| + z |B.xB.y 1| - |B.xB.y 1|.

|C.yC.z 1| |C.xC.z 1| |C.xC.y 1| |C.xC.y 1|.

А так как через три точки всегда можно провести плоскость (притом только одну) и число уравнений данной системы равно числу неизвестных, следовательно, система имеет нетривиальное решение (кроме очевидногоnx=ny=nz=d=0). Следовательно, определитель данной матрицы равен нулю.

Получаем:

|A.yA.z 1|.

nx = |B.yB.z 1|,.

|C.yC.z 1|.

|A.xA.z 1|.

ny = |B.xB.z 1|,.

|C.xC.z 1|.

|A.xA.y 1|.

nx = |B.xB.y 1|.

|C.xC.y 1|.

Рассмотрим нахождение значения nx (остальные координаты получаются аналогично):

nx = A. y |B.z 1| - A. z |B.y 1| + |B.yB.z| =.

|C.z 1| |C.y 1| |C.yC.z|.

= A. y (B.z — C. z) — A. z (B.y — C. y) + (B.yC.z — B.zC.y) =.

= A. y (B.z — C. z) + B. y (C.z — A. z) + C. y (A.z — B. z).

Итак, координаты вектора нормали:

nx = A. y (B.z — C. z) + B. y (C.z — A. z) + C. y (A.z — B. z).

ny = A. z (B.x — C. x) + B. z (C.x — A. x) + C. z (A.x — B. x) (10).

nz = A. x (B.y — C. y) + B. x (C.y — A. y) + C. x (A.y — B. y).

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

Показать весь текст
Заполнить форму текущей работой