Algorytm Lianga-Barsky’ego
Algorytm Lianga-Barsky’ego to technika obcinania odcinka do prostokątnego okna, wykorzystywana w grafice komputerowej. Jego nazwa pochodzi od autorów, You-Dong Lianga i Briana A. Barsky’ego, którzy zaprezentowali go w swojej publikacji. Algorytm ten opiera się na parametrycznym równaniu odcinka oraz na nierównościach definiujących prostokątne okno, które pozwalają na określenie wartości współczynnika parametrycznego, w ramach którego odcinek przecina boki okna. Dzięki uzyskanym danym możliwe jest ustalenie, która część odcinka powinna zostać narysowana. W porównaniu do algorytmu Cohena-Sutherlanda, algorytm Lianga-Barsky’ego charakteryzuje się większą efektywnością, szczególnie w sytuacjach, gdy konieczne jest przycięcie odcinka. Kluczowym pomysłem tego algorytmu jest minimalizacja liczby porównań przed przystąpieniem do obliczeń końców przyciętego odcinka.
Opis
Argumenty przekazywane do algorytmu
1. Odcinek łączący punkty:
(
x
1
,
y
1
)
{\displaystyle (x_{1},y_{1})}
i
(
x
2
,
y
2
)
,
{\displaystyle (x_{2},y_{2}),}
przedstawiony parametrycznie równaniami:
x
(
t
)
=
x
1
+
t
(
x
2
−
x
1
)
=
x
1
+
t
Δ
x
y
(
t
)
=
y
1
+
t
(
y
2
−
y
1
)
=
y
1
+
t
Δ
y
{\displaystyle {\begin{matrix}x(t)&=&x_{1}+t(x_{2}-x_{1})&=&x_{1}+t\,\Delta x\\y(t)&=&y_{1}+t(y_{2}-y_{1})&=&y_{1}+t\,\Delta y\end{matrix}}}
dla
t
∈
[
0
,
1
]
.
{\displaystyle t\in [0,1].}
Zmiana parametru od
0
{\displaystyle 0}
do
1
{\displaystyle 1}
opisuje również kierunek rysowania odcinka, którego dotyczy działanie algorytmu.
2. Prostokątne okno, którego krawędzie są równoległe do osi układu współrzędnych, określone przez współrzędne swoich narożników:
x
min
,
{\displaystyle x_{\min },}
x
max
,
{\displaystyle x_{\max },}
y
min
,
{\displaystyle y_{\min },}
y
max
.
{\displaystyle y_{\max }.}
Wynik działania algorytmu
Dwie wartości parametru
t
1
⩽
t
2
{\displaystyle t_{1}\leqslant t_{2}}
takie, że
(
x
(
t
1
)
,
y
(
t
1
)
)
{\displaystyle (x(t_{1}),y(t_{1}))}
i
(
x
(
t
2
)
,
y
(
t
2
)
)
{\displaystyle (x(t_{2}),y(t_{2}))}
są współrzędnymi punktów przecięcia odcinka z krawędziami okna, lub informacją, że takie punkty nie istnieją.
W przypadku, gdy istnieją punkty przecięcia, parametryczne równania dla
t
∈
[
t
1
,
t
2
]
{\displaystyle t\in [t_{1},t_{2}]}
opisują odcinek powstały w wyniku przycięcia wejściowego odcinka do obszaru okna, natomiast w drugim przypadku odcinek znajduje się w całości poza oknem.
Działanie algorytmu
Punkt
(
x
(
t
)
,
y
(
t
)
)
{\displaystyle (x(t),y(t))}
znajduje się wewnątrz okna, jeśli spełnione są następujące nierówności:
x
min
⩽
x
1
+
t
Δ
x
⩽
x
max
y
min
⩽
y
1
+
t
Δ
y
⩽
y
max
{\displaystyle {\begin{matrix}x_{\min }&\leqslant &x_{1}+t\,\Delta x&\leqslant &x_{\max }\\y_{\min }&\leqslant &y_{1}+t\,\Delta y&\leqslant &y_{\max }\end{matrix}}}
co można zapisać jako cztery niezależne nierówności:
t
p
k
⩽
q
k
,
k
=
1
,
2
,
3
,
4
,
{\displaystyle t\,p_{k}\leqslant q_{k},\quad k=1,2,3,4,}
odpowiadające poszczególnym krawędziom okna w kolejności: lewa, prawa, dolna, górna. Wartości parametrów są następujące:
p
1
=
−
Δ
x
,
q
1
=
x
1
−
x
min
p
2
=
Δ
x
,
q
2
=
x
max
−
x
1
p
3
=
−
Δ
y
,
q
3
=
y
1
−
y
min
p
4
=
Δ
y
,
q
4
=
y
max
−
y
1
{\displaystyle {\begin{array}{lcllcl}p_{1}&=&-\Delta x,&\quad q_{1}&=&x_{1}-x_{\min }\\p_{2}&=&\Delta x,&\quad q_{2}&=&x_{\max }-x_{1}\\p_{3}&=&-\Delta y,&\quad q_{3}&=&y_{1}-y_{\min }\\p_{4}&=&\Delta y,&\quad q_{4}&=&y_{\max }-y_{1}\end{array}}}
Ostateczne wyznaczenie odcinka:
Odcinek pionowy spełnia
p
1
=
p
2
=
0
,
{\displaystyle p_{1}=p_{2}=0,}
a odcinek poziomy
p
3
=
p
4
=
0
{\displaystyle p_{3}=p_{4}=0}
.
Jeśli dla pewnego
k
{\displaystyle k}
zachodzi
q
k
<
0
,
{\displaystyle q_{k}<0,}
to odcinek znajduje się na zewnątrz okna i dalsze obliczenia nie są konieczne.
Jeśli
p
k
<
0
{\displaystyle p_{k}<0}
to odcinek przecina bok z zewnątrz do wewnątrz, natomiast dla
p
k
>
0
,
{\displaystyle p_{k}>0,}
odcinek przebiega z wewnątrz na zewnątrz.
Dla niezerowego
p
k
,
{\displaystyle p_{k},}
wartość parametru
t
=
q
k
p
k
{\displaystyle t={\frac {q_{k}}{p_{k}}}}
określa punkt przecięcia z bokiem okna.
Dla danego odcinka wyznacza się
t
1
{\displaystyle t_{1}}
i
t
2
{\displaystyle t_{2}}
(parametry wyznaczające oba przycięte końce):
t
1
=
max
{
0
,
max
p
k
<
0
q
k
p
k
}
,
t
2
=
min
{
1
,
min
p
k
>
0
q
k
p
k
}
.
{\displaystyle {\begin{array}{lcl}t_{1}&=&\max {\left\{0,\max \limits _{p_{k}<0}{\frac {q_{k}}{p_{k}}}\right\}},\\t_{2}&=&\min {\left\{1,\min \limits _{p_{k}>0}{\frac {q_{k}}{p_{k}}}\right\}}.\end{array}}}
Jeśli
t
1
>
t
2
{\displaystyle t_{1}>t_{2}}
to cały odcinek znajduje się poza oknem, w przeciwnym razie obliczone wartości stanowią wynik działania algorytmu.
Własności
Współrzędne są obliczane wyłącznie dla dwóch punktów przecięcia.
Wystarczy obliczyć maksymalnie cztery parametry
t
{\displaystyle t}
.
Algorytm nie jest iteracyjny.
Można go również uogólnić na przypadki trójwymiarowe.
Uwagi
Przypisy
Bibliografia
Clipping, [w:] Max K.M.K. Agoston, Computer graphics and geometric modeling. Implementation and algorithms, Springer London, 2005, s. 69–110, DOI: 10.1007/1-84628-108-3_3, ISBN 978-1-84628-108-2.
James D.J.D. Foley, Computer Graphics: Principles and Practice, Addison-Wesley Professional, 1996, ISBN 978-0-201-84840-3 [dostęp 2015-11-30].
Michał M. Jankowski, Elementy grafiki komputerowej, Warszawa: Wydawnictwa Naukowo-Techniczne, 1990, ISBN 83-204-1326-5.
You-Dong Y.D. Liang, B.A.B.A. Barsky, A New Concept and Method for Line Clipping, „ACM Trans. Graph.”, 3 (1), 1984, s. 1–22, DOI: 10.1145/357332.357333, ISSN 0730-0301 [dostęp 2015-11-22].
CS355. Graphics and Multimedia. Clipping. [dostęp 2015-11-22] [zarchiwizowane 2018-03-28].
Linki zewnętrzne
Algorytm obcinania Lianga-Barsky’ego [online], Warsztat.GD [dostęp 2015-11-22].
Grafika komputerowa I – 3. Obcinanie linii i wielokątów – MIM UW [online], mst.mimuw.edu.pl [dostęp 2015-11-22].
Artykuł dotyczący Catmulla-Clarka.
Bimal Kumar B.K. Ray, A Line Segment Clipping Algorithm in 2D, „International Journal of Computer Graphics”, 3 (2), listopad 2012 [dostęp 2015-11-30] [zarchiwizowane z adresu 2017-08-08].