
Компьютерная геометрия и графика
..pdf51
Точки схода в данном случае расположены на оси x [1/ p 0 0 1] и на оси y [0 1/ q 0 1] .
Отметим, что для построения реалистичной проекции недостаточно просто отцентрировать объект. Его нужно еще повернуть определенным образом, но это мы рассмотрим позже.
Аналогично, трехточечная или косая перспектива получается
|
|
|
|
|
|
1 |
0 |
0 |
p |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
z |
= [x y z |
1] |
0 |
1 |
0 |
q |
|
= [x y z px + qy + rz +1], |
||
x |
h |
|
|
|
|
|
|||||
|
|
|
|
|
|
0 |
0 |
1 |
r |
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
|
x |
y |
z |
|
|||
|
x |
|
y |
|
z |
|
1 |
= |
|
|
|
|
|
|
1 . |
|
|
|
|
|
px + qy + rz +1 |
px + qy + rz +1 |
|||||||||
|
|
|
|
|
|
|
px + qy + rz +1 |
|
Точки схода лежат на всех трех осях:
[1/ p 0 0 1],[0 1/ q 0 1],[0 0 1/ r 1].
Пример построить самостоятельно.
При построении перспективных проекций для получения “правильных” (реалистических) изображений часто полезно выполнить ряд предварительных аффинных преобразований поворотов вокруг координатных осей и смещений. При этом может измениться вид перспективы.
Повернем единичный куб вокруг оси y на угол θ и сместим его к точке
[l m |
n] |
. Затем построим одноточечную перспективную проекцию с центром |
||||||||||||||
в точке k |
на оси z на плоскости z =1 |
|
|
|
|
|
|
|
|
|||||||
Матрица: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
cosθ |
0 |
−sinθ |
0 1 |
0 |
0 |
|
0 |
|
cosθ |
0 |
−sinθ |
−sinθ / k |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
1 |
0 |
0 0 1 |
0 |
0 |
|
= 0 |
|
1 |
0 |
0 |
. |
||
|
|
θ |
|
cosθ |
|
|
|
|
|
|
|
θ |
|
cosθ |
cosθ / k |
|
sin |
0 |
0 0 |
0 |
1 |
|
1/ k |
|
sin |
0 |
|
||||||
l |
|
m |
n |
1 0 0 |
0 |
1 |
l |
|
m |
n |
n / k +1 |
Т.е. матрица преобразования дает двухточечную перспективу.

|
|
52 |
|
точка |
Y* |
точка |
|
схода |
схода |
||
|
X*
Рисунок 2.12 |
|
При этом линии, которые были параллельны оси |
y , остались |
параллельны, а линии, которые были параллельны осям x и |
z , сходятся в |
точках [−kctgθ 0] и [ktgθ 0] на оси x . |
|
Трехточечная перспектива получается, если предварительно выполнено вращение вокруг двух координатных осей, например на угол θ вокруг оси y и
угол Φ вокруг оси x .
2.8.6 Восстановление трехмерной информации Восстановление трехмерной информации по его проекциям является
проблемой в самых разных областях науки и техники. Очень распространен и хорошо изучен метод восстановления трехмерной информации по трем ортогональным проекциям (чертежи: вид сверху, сбоку и спереди). Менее известно и более проблематично восстановление информации по перспективным проекциям, например по фотографиям. Ниже мы рассмотрим основные положения, позволяющие восстанавливать трехмерную информацию по проекциям произвольного вида, и сформулируем требования к тому, какая априорная информация необходима в тех или иных случаях.
Проекция произвольного вида на плоскость z = 0 получается с помощью следующего преобразования общего вида:
53
|
T |
T |
0 |
T |
|
|
|
|
|
|
|
11 |
12 |
0 |
14 |
|
|
|
|
|
|
[x y z 1] |
T21 |
T22 |
T24 |
y |
0 |
(3.8.6.1) |
||||
|
|
0 |
|
|
= x |
h . |
||||
|
T31 |
T32 |
T34 |
|
|
|
|
|
|
|
|
T41 |
T42 |
0 |
T44 |
|
|
|
|
|
|
Аналогично можно записать проекции на плоскость x = 0 и y = 0 . Мы будем рассматривать вопросы восстановления в случае плоскости z = 0 . Остальные случаи, очевидно, легко могут быть рассмотрены по аналогии.
Раскроем уравнение (3.8.6.1):
|
|
|
|
* |
; |
|
|
|
|
|
|
|
a) T11x +T21 y +T31z +T41 = hx |
|
|
|
|
|
|
||||||
|
|
|
|
* |
; |
|
|
|
|
|
(3.8.6.2) |
|
b) T12 x +T22 y +T32 z +T42 = hy |
|
|
|
|
|
|
||||||
c) T x +T y +T z +T = h . |
|
|
|
|
|
|
|
|
||||
|
14 |
24 |
34 |
44 |
|
|
|
|
|
|
|
|
Подставим (3.8.6.2) c) в a) и b) : |
|
|
|
|
||||||||
(T |
−T x ) x +(T |
−T x ) y +(T |
−T x ) z +(T |
−T |
x ) = 0; |
(3.8.6.3) |
||||||
11 |
|
14 |
21 |
24 |
|
|
31 |
34 |
41 |
44 |
|
|
(T −T y ) x +(T −T y ) y + |
(T −T y ) z +(T −T y ) = 0. |
|
||||||||||
12 |
|
14 |
22 |
24 |
|
|
32 |
34 |
42 |
44 |
|
На систему уравнений (3.8.6.3) можно смотреть с трех точек зрения.
1. Пусть известны x , y , z и матрица T . Найти x* , y* . Это – задача построения проекции, которой мы уже занимались до сих пор. Решение получается непосредственно из уравнения (3.8.6.3).
2. Пусть известны матрица T и координаты x , y . Требуется найти координаты x, y, z . Это задача восстановления трехмерной информации по проекции известного вида. При этом система уравнений (3.8.6.3) не имеет решения (два уравнения с тремя неизвестными). Для получения искомых координат требуется иметь две различные проекции, матрицы которых T и T′′ известны, и, кроме того, известны координаты одной и той же точки пространства на каждой из этих проекций x1, y1 и x2 , y2 . (Пример – две фотографии объекта). Тогда имеем две пары уравнений вида (3.8.6.3), которое в матричном виде можно записать как
54
AX =T , где |
|
|
|
|||
|
T |
′ |
−T |
|
′x |
|
|
11 |
14 |
|
1 |
||
T |
′ |
−T |
′y |
|||
A = |
12 |
14 |
|
1 |
||
T |
″ −T |
|
″x |
|||
|
11 |
14 |
|
2 |
||
|
|
″ |
−T14 |
″ |
|
|
T12 |
|
|
y2 |
|||
X =[x |
|
y |
z]T ; |
T21′ −T24′x1
T22′ −T24′y1
T21″ −T24″x2
T22″ −T24″y2
T |
′ −T ′x |
|
|||
31 |
34 |
|
1 |
|
|
T |
′ |
−T ′y |
|
||
32 |
34 |
|
1 |
; |
|
T |
″ −T |
″x |
|
||
31 |
34 |
|
2 |
|
|
T32 |
″ |
−T34 |
″ |
|
|
|
|
y2 |
|
B = |
|
|
′ |
x |
|
−T |
′ |
T |
′ |
y |
|
−T |
′ |
T |
″ |
x |
|
−T |
″ |
T |
″ |
y |
|
−T |
″ T |
. |
T |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
44 |
1 |
41 |
44 |
1 |
42 |
44 |
|
|
2 |
41 |
44 |
|
|
2 |
42 |
|
Получим систему из 4-х уравнений с тремя неизвестными. Решение этой системы может быть получено только приближенно, методом подбора. Тем не менее, то, что мы получили – это метод восстановления трехмерной информации по двум различным, но известным проекциям.
3.Пусть известны координаты точки в трехмерном пространствеx, y, z и
еекоординаты на проекции x, y . Необходимо определить матрицу T , то есть
вид проекции. Теперь два уравнения (3.8.6.3) содержат 12 неизвестных. Для получения решения нам нужно иметь 6 таких пар уравнений, т.е. знать координаты в пространстве и на проекции – 6 так называемых опорных точек. Имея такую априорную информацию, мы можем восстановить вид проекции, то есть найти элементы матрицы T , и затем использовать этот результат для восстановления трехмерных координат других, не опорных точек, по методу, рассмотренному в предыдущем случае.
В матричной форме система 12 – ти уравнений может быть записана следующим образом:
A′T = 0 ,
где
55
x10x2
0x3
A′ = 0x40
x50
x60
T =[T11
0 |
−x x * |
|
|
1 |
1 |
x |
−x y * |
|
1 |
1 |
1 |
0 |
−x x * |
|
|
2 |
2 |
x |
−x y * |
|
2 |
2 |
2 |
0 |
−x x * |
|
|
3 |
3 |
x |
−x y * |
|
3 |
3 |
3 |
0 |
−x |
x * |
|
4 |
4 |
x |
−x y * |
|
4 |
4 |
4 |
0 |
−x x * |
|
|
5 |
5 |
x |
−x y * |
|
5 |
5 |
5 |
0 |
−x x * |
|
|
6 |
6 |
x |
−x y * |
|
6 |
6 |
6 |
y1 0 0 y1 y2 0 0 y2 y3 0 0 y3 y4 0 0 y4 y5 0 0 y5 y6 0 0 y6
−y1x1*
−y1 y1*
−y2 x2*
−y2 y2*
−y3 x3*
−y3 y3*
−y4 x4*
−y4 y4*
−y5 x5*
−y5 y5*
−y6 x6*
−y6 y6*
z |
0 |
−z x * |
||||
|
1 |
|
|
|
1 |
1 |
0 |
z |
−z y * |
||||
|
|
|
1 |
|
1 |
1 |
z |
2 |
0 |
−z |
x * |
||
|
|
|
|
2 |
2 |
|
0 |
z |
2 |
−z |
2 |
y * |
|
|
|
|
|
2 |
||
z |
0 |
−z x * |
||||
|
3 |
|
|
|
3 |
3 |
0 |
z |
−z y * |
||||
|
|
|
3 |
|
3 |
3 |
z |
4 |
0 |
−z |
x * |
||
|
|
|
|
4 |
4 |
|
0 |
z |
4 |
−z |
4 |
y * |
|
|
|
|
|
4 |
||
z |
5 |
0 |
−z x * |
|||
|
|
|
|
5 |
5 |
|
0 |
z |
5 |
−z y * |
|||
|
|
|
|
5 |
5 |
|
z |
6 |
0 |
−z |
x * |
||
|
|
|
|
6 |
6 |
|
0 |
z |
6 |
−z |
6 |
y * |
|
|
|
|
|
6 |
T12 T14 T21 T22 T24 T31 T32 T34 T41 T42
1 0
01
10
01
10
01
10
01
10
01
10
01
T44 ]T .
x1*
y1*
x *
2*
y2
x3*
y3* ; x4*
y4* x5*
y *
x5* 6
y6*
56
3ПЛОСКИЕ КРИВЫЕ
3.1МАТЕМАТИЧЕСКОЕ ОПИСАНИЕ ПЛОСКИХ КРИВЫХ
Вэтом разделе мы будем заниматься математическим описанием кривых на плоскости, а затем в пространстве, и далее – описанием поверхностей.
С одной стороны, любая кривая может быть представлена совокупностью точек, над которыми затем могут выполняться рассмотренные ранее преобразования. При этом важно, чтобы точки кривой располагались достаточно близко друг к другу, иначе они будут давать неверное представление о форме кривой. Математическое описание кривой имеет целый ряд преимуществ перед описанием через совокупность точек.
Основные преимущества следующие:
1. математическое описание является точным; оно позволяет вычислить такие характеристики кривой, как наклон, радиус кривизны и т. д.
2.оно компактно может быть занесено в память.
3.математическое описание позволяет легко менять форму кривых; результаты преобразования кривых известной матрице T могут быть также представлены в форме математического описания.
Теперь рассмотрим различные методы математического описания плоских кривых.
Математически кривая может быть представлена в параметрической и непараметрической форме. Непараметрическое описание задается в виде явной функции
y = f (x),
либо в виде неявной функции f (x, y) = 0.
Задание в виде явной функции имеет один существенный недостаток: этим способом нельзя определить многозначные кривые, то есть такие, в которых одному значению x может соответствовать два и более значения y .
Неявные функции лишены этого недостатка.

57
При параметрическом задании кривой каждая координата точки на кривой представляется как функция одного параметра.
Плоские параметрические кривые с одним параметром представляются в
виде
x = f (t )y = f (t ),
где t – параметр.
Геометрическая интерпретация математических описаний следующая. |
|
Для непараметрических функций – это геометрическое место точек плоскости, |
|
удовлетворяющих уравнениям |
y = f (x) или f (x, y) = 0. То есть все точки |
[x, y], удовлетворяющие этим |
уравнениям, принадлежат кривой, и ни одна |
точка, координаты которой не удовлетворяют уравнениям, не принадлежит |
кривой.
Параметрические кривые интерпретируются как траектория движения некоего точечного объекта. При этом t имеет смысл времени. Положение конкретной точки (то есть в фиксированный момент времени) определяется
( ) ( )
парой f t ; g t .
Наклон кривой определяется следующим оразом:
– для явной непараметрической функции:
dy |
|
df |
|
′ |
dy |
|
|
|
= |
|
= |
f x(x) Y − y = |
|
( X − x) – уравнения касательных |
|
dx |
dx |
dx |
|||||
|
|
|
|
– для неявной непараметрической функции:
|
dy |
= − |
∂f |
∂x |
(из уравнения |
∂f dx + |
∂f dy = 0 ). |
|
|
∂f |
∂y |
||||
|
dx |
|
∂x |
∂y |
|||
Уравнения касательных: |
|
|
|||||
|
∂F ( X − x) + |
∂F (Y − y) = 0 ; |
|
|
|||
|
∂x |
|
|
∂y |
|
|
– для параметрической функции:

58
tgα = |
dy |
= |
dy dt |
= |
g′(t ) |
|
|
|
|
; |
|||
dx |
dx dt |
f ′(t ) |
Уравнения касательных:
X − x = Y − y ; x′ y′
Наибольшее применение в машинной графике находят так называемые конические сечения.
Конические сечения – это сечения правильного конуса некоторой плоскостью. В зависимости от взаимного расположения секущей плоскости и оси симметрии конуса сечение будет являться кривой, относящейся к следующим четырем типам:
окружность, эллипс, парабола и гипербола.
Все эти кривые относятся к кривым второй степени, то есть могут быть описаны уравнениями второй степени
ax2 +bxy + cy2 + dx + ey + f = 0 , |
(4.1.1.) |
где хоть один из a,b,c ≠ 0 . Вопрос, о том, какую именно кривую представляет это уравнение, определяется значениями его коэффициентов. Можно показать, что если величина дискриминанта.
D = b2 − 4ac = 0, то это парабола;
если D < 0 – эллипс или окружность; если D > 0 – гипербола.
3.2ОКРУЖНОСТЬ
Окружность с центром в точке C[m,n] и радиусом r задается уравнением
(x − m)2 +( y − n)2 = r2 .
Раскрывая скобки, приведем его к виду (4.1.1):
x2 + y2 − 2mx − 2ny + m2 + n2 − r2 = 0
или

59
x2 + y2 + dx + ey + f = 0
где
d = −2m, e = −2n, f = m2 + n2 − r2 .
Таким образом, уравнение окружности содержит три неизвестных коэффициента. Соответственно, для построения окружности (или дуги окружности) необходимо знать три точки, через которые она проходит: две концевые точки дуги и одну промежуточную. Однако построение дуги окружности через три заданные точки – это не единственный способ. Дуга окружности будет определена, если известны
–две концевые точки и центр;
–одна концевая точка и наклон в начале и в конце и т. д. Приведем пример.
1. Построить дугу окружности, проходящей через три точки:
(1, 1), (2, 2), (3, 2).
Уравнение окружности x2 + y2 + dx + ey + f = 0 в результате подстановки
координат этих точек: 2 + d + e + f = 0 ;
8 + 2d + 2e + f = 0;
13 +3d + 2e + f = 0.
Решением этой системы является d = −5; e = −1; f = 4 ,
то есть уравнение искомой дуги
x2 + y2 −5x + y + 4 = 0; 1< x < 3 .
Центр этой окружности лежит в точке [m,n]
m = −d 2 = 5 2 = 2.5 ,
n = −e 2 =1 2 = 0.5.
Радиус этой окружности
r = m2 + n2 − f = 6.25 + 0.25 − 4 = 2.5 .

60
2. Построить дугу окружности заданного радиуса r = 5, проходящую
через две точки (1, 1) и (3, 2). Тогда
2 + d + e + f = 0 13 +3d + 2e + f = 0
d 2 4 + e2 4 − f = 25 .
Решение этой системы получается итерационным способом:
d = −8.4; e = 5.7; f = 0.7 .
Центр окружности [m,n] =[4.2;−2.85] .
3. Построить окружность с начальной точкой (1 ,1) и с наклоном в начале 1, в конце – 0. (конечная точка здесь не известна и не может быть выбрана произвольно).
Определим уравнение наклона:
dy |
= − |
∂f |
∂x = − |
2x + d |
. |
|
∂f |
|
|||
dx |
∂y |
2y + e |
Тогда исходные данные запишутся как y =1 при x =1;
dydx =1 при y =1 и x =1; dy
dx = 0 при x = 3 ;
то есть
2 + d + e + f = 0 ;
−2 + d =1 , то есть 4 + d + e = 0 ; 2 + e
6 + d = 0.
Отсюда d = −6; e = 2; f = 2 .
Уравнение исходной окружности: x2 + y2 −6x + 2y + 2 = 0 .
Радиус: r = (d / 2)2 + (e / 2)2 − f = 9 +1− 2 = 8 .