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 }