Algorytm Lianga-Barsky’ego

Z testwiki
Wersja z dnia 07:09, 2 sie 2021 autorstwa imported>InternetArchiveBot (Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.8)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

Szablon:Spis treści Algorytm Lianga-Barsky’ego – algorytm obcinania odcinka do prostokątnego oknaSzablon:Odn, stosowany w grafice komputerowej. Nazwa algorytmu pochodzi od nazwisk autorów You-Dong Lianga i Briana A. Barsky’ego, którzy zaproponowali go w swojej pracySzablon:Odn. Algorytm wykorzystuje parametryczne równanie odcinka oraz nierówności opisujące prostokątne okno do określenia wartości współczynnika parametrycznego, dla których odcinek przecina się z bokami oknaSzablon:Odn. Na podstawie tak uzyskanych danych można określić, którą część odcinka można narysować. Ten algorytm jest bardziej wydajny niż algorytm Cohena-SutherlandaSzablon:Odn w przypadku gdy zachodzi konieczność przycięcia odcinkaSzablon:Odn. Pomysłem w algorytmie Lianga-Barsky’ego jest wykonywanie tylu porównań, na ile jest to możliwe przed właściwym obliczaniem końców przyciętego odcinkaSzablon:Odn.

Opis

Argumenty przekazywane do algorytmu

1. Odcinek łączący punkty (x1,y1) i (x2,y2), przedstawiony parametrycznie równaniamiSzablon:Odn:

x(t)=x1+t(x2x1)=x1+tΔxy(t)=y1+t(y2y1)=y1+tΔy

dla t[0,1]. Zmiana parametru od 0 do 1 opisuje też kierunek rysowania odcinka, do którego odnosi się działanie algorytmu.

2. Prostokątne okno o krawędziach równoległych do osi układu współrzędnych, zadane przez współrzędne swoich narożnikówSzablon:Odn:

xmin, xmax, ymin, ymax.

Wynik działania algorytmu

Dwie wartości parametru t1t2 takie, że (x(t1),y(t1)) i (x(t2),y(t2)) są współrzędnymi punktów przecięcia odcinka z krawędziami okna[uwaga 1], bądź informacja, że takie punkty nie istnieją.

W tej pierwszej sytuacji wejściowe równania parametryczne dla t[t1,t2] opisują odcinek, który jest wynikiem przycięcia odcinka wejściowego do obszaru okna, w tej drugiej odcinek leży w całości na zewnątrz okna.

Działanie algorytmu

Punkt (x(t),y(t)) znajduje się wewnątrz okna będącego argumentem algorytmu dokładnie wtedy, gdy spełnione są nierównościSzablon:Odn:

xminx1+tΔxxmaxyminy1+tΔyymax

co można wyrazić równoważnie jako cztery nierównościSzablon:Odn

tpkqk,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:

p1=Δx,q1=x1xminp2=Δx,q2=xmaxx1p3=Δy,q3=y1yminp4=Δy,q4=ymaxy1

Ostateczne wyznaczenie odcinka:

  1. Odcinek pionowy spełnia p1=p2=0, a poziomy p3=p4=0Szablon:Odn.
  2. Jeśli dla pewnego k zachodzi qk<0, to odcinek znajduje się na zewnątrz okna i dalszych obliczeń nie trzeba prowadzićSzablon:Odn.
  3. Jeśli pk<0 to odcinek przecina bok z zewnątrz do wewnątrz, natomiast dla pk>0, odcinek przebiega z wewnątrz na zewnątrz.
  4. Dla niezerowego pk, wartość parametru t=qkpk określa punkt przecięcia z bokiem oknaSzablon:Odn.
  5. Dla danego odcinka wyznacza się t1 i t2 (parametry wyznaczające oba przycięte końce)Szablon:Odn:
    t1=max{0,max\limits pk<0qkpk},t2=min{1,min\limits pk>0qkpk}.
  6. Jeśli t1>t2 to cały odcinek znajduje się poza oknemSzablon:Odn, w przeciwnym razie obliczone wartości stanowią wynik działania algorytmu.

Własności

  • Współrzędne są obliczane tylko dla dwóch punktów przecięciaSzablon:Odn.
  • Wystarcza obliczenie nie więcej niż czterech parametrów tSzablon:Odn.
  • Algorytm nie jest iteracyjnySzablon:Odn.
  • Algorytm można uogólnić na przypadki trójwymiarowe[uwaga 2]Szablon:Odn.

Uwagi

Szablon:Uwagi

Przypisy

Szablon:Przypisy

Bibliografia

Linki zewnętrzne


Błąd rozszerzenia cite: Istnieje znacznik <ref> dla grupy o nazwie „uwaga”, ale nie odnaleziono odpowiedniego znacznika <references group="uwaga"/>