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:
-
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;
-
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);
-
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:
- ha mindkét végpont belül van, akkor a teljes vonal belül van, nincs vágás;
- ha pontosan egy végpont van belül, akkor metszéspontot kell kiszámolni
és vágni;
- 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:
- 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:
| 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:
- 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
|