 
 
 
 
 
  
 
 
 
	
	
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:
 eine Linie.
Dann gilt bei einer bitweisen Verknüpfung:
code  AND code
 AND code 
 komplett außerhalb (beide Punkte auf derselben Seite)
 komplett außerhalb (beide Punkte auf derselben Seite)
code  OR code
 OR code 
 komplett innerhalb (beide Punkte im Clip-Fenster)
 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.
 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
}
 
 
 
 
 
  
