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
}