ВУЗ:
Составители:
Основы компьютерной графики для программистов 17
____________________________________________________________________________________________________________________
http://www.ksu.ru/persons/9134.ru.html
выше упомянутых методов. После описания для него будет приведен текст процедуры
на Delphi, написанный автором данной работы.
Зададим порядок обхода вершин и перенесем вершины треугольника и проверяемую
точку так чтобы начало координат совпало с точкой
A, например, как показано на
рис. 14
а. Конкретное направление обхода вершин треугольника, по или против часовой
стрелки, не имеет значения. Рассмотрим углы
1
α
и
2
α
, как показано на Рис. 14a, b и c,
где
X – точка, проверяемая на принадлежность внутренней области треугольника.
Утверждается, что только в том случае когда точка
X находится внутри треугольника,
знак
()
12
α
α
−Sin будет всегда совпадать для всех циклически выбираемых пар углов
1
α
и
2
α
при последовательном совмещении вершин треугольника с началом координат.
Пусть вершинам треугольника
A, B, C и проверяемой точке X соответствуют радиус-
векторы
(
)
yx
aa ,=a
,
(
)
yx
bb ,=b
,
(
)
yx
cc ,
=
c
и
(
)
yx,
=
x .
Найдем выражение, по которому можно легко вычислить знак
()
12
α
α
−Sin .
Для ситуации, изображенной на Рис.14
a
()
(
)
(
)( )
(
)
acax −−
−−
−
−
−
=−=−
yyxxxy
acaxacay
SinCosCosSinSin
121212
αααααα
Очевидно, что знак
()
12
α
α
−Sin совпадает со знаком числителя правой части. Таким
образом, получаем, что знак левой части определяется выражением
(
)
(
)
(
)
(
)
(
)
yyxxxy
acaxacaySign
−
−
−
−
−
,
где
Sign – функция получения знака числа. Аналогичные рассуждения для оставшихся
двух случаев, изображенных на рисунках b и с, приводят, соответственно, к
выражениям
(
)
(
)
(
)
(
)
(
)
yyxxxy
babxbabySign
−
−
−
−
−
(
)
(
)
(
)
(
)
(
)
yyxxxy
cbcxcbcySign
−
−
−
−
−
.
Доказательство правильности утверждения данного метода можно получить, если
заметить, что знак
()
12
α
α
−Sin не меняется при повороте плоскости относительно
начала координат. Тогда, для каждого из трех случаев, изображенных на рисунках 14
a,
b и c, соответствующими поворотами плоскости можно добиться того, чтобы угол
1
α
был равен нулю, а оставшаяся часть треугольника, вместе с проверяемой точкой,
Рисунок 14. Последовательное измерение углов для получения разности
()
12
α
α
− .
Основы компьютерной графики для программистов 17
____________________________________________________________________________________________________________________
выше упомянутых методов. После описания для него будет приведен текст процедуры
на Delphi, написанный автором данной работы.
Зададим порядок обхода вершин и перенесем вершины треугольника и проверяемую
точку так чтобы начало координат совпало с точкой A, например, как показано на
рис. 14а. Конкретное направление обхода вершин треугольника, по или против часовой
стрелки, не имеет значения. Рассмотрим углы α 1 и α 2 , как показано на Рис. 14a, b и c,
где X – точка, проверяемая на принадлежность внутренней области треугольника.
Рисунок 14. Последовательное измерение углов для получения разности (α 2 − α 1 ) .
Утверждается, что только в том случае когда точка X находится внутри треугольника,
знак Sin(α 2 − α 1 ) будет всегда совпадать для всех циклически выбираемых пар углов
α 1 и α 2 при последовательном совмещении вершин треугольника с началом координат.
Пусть вершинам треугольника A, B, C и проверяемой точке X соответствуют радиус-
векторы a = (a x , a y ), b = (bx , b y ) , c = (c x , c y ) и x = ( x, y ) .
Найдем выражение, по которому можно легко вычислить знак Sin(α 2 − α 1 ) .
Для ситуации, изображенной на Рис.14 a
(y − a )(c − a x ) − ( x − a x )(c y − a y )
Sin(α 2 − α 1 ) = Sinα 2 Cosα 1 − Cosα 2 Sinα 1 =
y x
x−a c−a
Очевидно, что знак Sin(α 2 − α 1 ) совпадает со знаком числителя правой части. Таким
образом, получаем, что знак левой части определяется выражением
Sign(( y − a y )(c x − a x ) − ( x − a x )(c y − a y )) ,
где Sign – функция получения знака числа. Аналогичные рассуждения для оставшихся
двух случаев, изображенных на рисунках b и с, приводят, соответственно, к
выражениям
Sign(( y − b y )(a x − bx ) − ( x − bx )(a y − b y ))
Sign(( y − c y )(bx − c x ) − ( x − c x )(b y − c y )) .
Доказательство правильности утверждения данного метода можно получить, если
заметить, что знак Sin(α 2 − α 1 ) не меняется при повороте плоскости относительно
начала координат. Тогда, для каждого из трех случаев, изображенных на рисунках 14 a,
b и c, соответствующими поворотами плоскости можно добиться того, чтобы угол
α 1 был равен нулю, а оставшаяся часть треугольника, вместе с проверяемой точкой,
http://www.ksu.ru/persons/9134.ru.html
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »
