A vágásról általában

Pontok vágása

Vonalak, szakaszok vágása egyenletrendszer megoldásával

A COHEN-SUTHERLAND -féle vonal vágás

Parametrikus vonal vágó algoritmus

Körök és ellipszisek vágása

Poligonok vágása

A vágásról általában

a primitívekből csak annyit szabad mutatni, amennyi belőlük látszik (takarás, kilóg a képből)

módszerek:

  1. vágjuk le a megjelenítés előtt, azaz számítsuk ki a metszésponto(ka)t és az új végpontokkal rajzoljunk;
  2. ollózás: pásztázzuk a teljes primitívet, de csak a látható képpontokat jelenítjük meg (minden (x,y)-ra ellenőrzés);
  3. a teljes primitív lerajzolása egy munkaterületre, majd innen másoljuk át a megfelelő darabot

Vissza a lap tetejére

Pontok vágása:

(x,y) belül van ha

  xmin x xmax
és  
  ymin y ymax




Vissza a lap tetejére

Vonalak, szakaszok vágása egyenletrendszer megoldásával


elég a végpontokat vizsgálni:

  1. ha mindkét végpont belül van, akkor a teljes vonal belül van, nincs vágás;
  2. ha pontosan egy végpont van belül, akkor metszéspontot kell kiszámolni és vágni;
  3. ha mindkét végpont kívül van, akkor lehet hogy nincs közös része a vágási téglalappal, további vizsgálat szükséges.

a vágási téglalap minden élére megvizsgáljuk:
van-e az élnek közös része az egyenessel (egyenesek metszéspontjának a meghatározása, élen belül van-e a metszéspont)

probléma:

egyenesek (nem szakaszok) metszéspontjai,
speciális esetek (vízszintes, függőleges egyenesek)

javítás:

parametrikus alak

x = x0 + t(x1-x0)   ez szakaszt ír le
  t [0,1]
y = y0 + t(y1-y0)  

metszéspont:

tél : paramétere a metszéspontnak az élen
tvonal : paramétere a metszéspontnak a vonalon

ha tél , tvonal [0,1] , akkor belül van a metszéspont

még így sem hatékony módszer, mert sokat kell ellenőrizni és számolni


Vissza a lap tetejére

A COHEN - SUTHERLAND - féle vonal vágás

előzetes vizsgálatok:

  1. ha a végpontok belül vannak, akkor nincs mit vágni (triviális elfogadás) -
    mindkét végpont kódja : 0000
különben:

  1. ha x1 ,x2 < xmin , minden kívül van
      x1 ,x2 > xmax , (triviális elvetés)
      y1 ,y2 < ymin , kód1 and kód2 0
    vagy y1 ,y2 > ymax  (bitenként)
különben:
  1. az (x1,y1) - (x2,y2) szakasz metszi valamelyik élt, tehát vegyünk egy külső végpontot (legalább egyik az; válasszunk közülük felülről lefelé és jobbról balra haladva, ha több van), számítsuk ki a metszéspontot, a két részre bomlott szakasz egyik fele 2. pont alapján triviálisan elvethető.

interaktív eljárás,
hatékony, mert gyakori, hogy sok szakasz van belül, vagy kevés szakasz van belül,
legáltalánosabban használt eljárás


Vissza a lap tetejére

Parametrikus vonal vágó algoritmus

(ha Ni(P1-P0) = 0, akkor párhuzamos így meghatározható az egyenesnek a téglalap 4 egyenesével való 4 metszéspontja (4 db t érték).
melyik két t a megfelelő?

  1.  t [0,1],

különben   

2.   PE : olyan pont, ahol P0-ból P1-felé haladva belépünk egy belső félsíkba,
ekkor Ni(P1-P0) < 0
PL : olyan pont, ahol P0-ból P1-felé haladva kilépünk egy belső félsíkból,
ekkor Ni(P1-P0) > 0


      


legyen
tE = max{0,max{tPE}},
tL = min{1,min{tPL}}

ha tE > tL, akkor nincs belső metszés




begin
   Ni kiszámítása, PEi kiválasztása
   for szakaszokra
     if P1 = P0 then
        elfajult szakasz = pont
     else
       begin
         tE = 0; tL = 1; D = P1-P0;
         for élekkel való metszéspontokra
           if Ni*D <> 0 then {párhuzamos}
		begin
		  t kiszámítása
		  használjuk Ni*D előjelét,
		  hogy PE és PL; kategorizáljunk
		  if PE then tE = max(tE,t);
		  if PL then tL = min(tL,t)
		end;
	     if tE > tL then
		  return nil
	     else
		  return P(tE) és P(tL) mint metszéspontok
       end
end

Vissza a lap tetejére

Körök és ellipszisek vágása

triviális vizsgálat:

ha a keret belül van, akkor a kör is belül van, nincs mit vágni;
ha a keret kívül van, akkor a kör is kívül van, nincs mit vágni.

különben:

körnegyedekre (nyolcadokra) megismételjük a kör és él metszéspont meghatározó eljárást.
pásztázás
(ha a kör nem nagy akkor ollózás)

Ellipszis: hasonló


Vissza a lap tetejére

Poligonok vágása

sok eset lehet:

általában minden éllel vágni kell

SUTHERLAND, HODGMAN: sorban véve az éleket egyenként vágjunk velük

(v1 ,v2 ,...,vn ) (v'1 ,v'2 ,...,v'm )
csúcspontok   új csúcspontok

Vissza a lap tetejére