Idee von Cohen & Sutherland
Teile Ebene anhand des Clip-Fensters in 9 Bereiche ein, beschrieben durch 4-Bit-Bereichscode:
Bit 0: | links vom Fenster |
Bit 1: | rechts vom Fenster |
Bit 2: | unter dem Fenster |
Bit 3: | über dem Fenster |
Sei
eine Linie.
Dann gilt bei einer bitweisen Verknüpfung:
code AND code
komplett außerhalb (beide Punkte auf derselben Seite)
code OR code
komplett innerhalb (beide Punkte im Clip-Fenster)
In den anderen Fällen wird
mit einer Fensterkante
geschnitten und der Test mit der verkürzten Linie erneut ausgeführt.
private static final byte CENTER = 0; private static final byte LEFT = 1; private static final byte RIGHT = 2; // 4-Bit-Bereichscodes private static final byte BOTTOM = 4; private static final byte TOP = 8; /** * Liefert den region code fuer den uebergebenen Punkt * * @param x Die x-Koordinate des zu testenden Punktes * @param y Die y-Koordinate des zu testenden Punktes * * @return Der region code in einem Byte kodiert */ public byte region_code(int x, int y) { byte c = CENTER; // zunaechst: im Zentrum if (x < xmin) // falls links vom Fenster c = LEFT; // links vermerken else // falls nicht links if (x > xmax) // falls rechts vom Fenster c = RIGHT; // rechts vermerken if (y < ymin) // falls oberhalb c |= TOP; // oberhalb hinzufuegen else // falls nicht oberhalb if (y > ymax) // falls unterhalb c |= BOTTOM; // unterhalb hinzufuegen return c; // region code zurueck }