# Schnittfläche von Rechtecken



## kleeneQueen (5. Dez 2010)

Hallo, 
habe folgendes Problem... unzwar soll ich das Schnittrecheck zweier Rechecke berechnen... 
jeder ohne die Verwendung von Bibliotheken... also auch ohne intersection... 

hier mein bisheriger code jedoch mit intersection damit überhaupt was funktioniert ^^ 

```
package grafik2;
 
import java.awt.*;
 
import javax.swing.*;
 
public class test extends JPanel {
 
    public void paintComponent( Graphics g ){
 
        int x = 50;
        int y = 50;
        int width = 150;
        int height = 150;
 
        Rectangle r1 = new Rectangle(x, y, width, height);
        Rectangle r2 = new Rectangle(x+100, y+100, width-65, height-65);
    
        //rechteck 1
        Graphics2D g2 = (Graphics2D)g;
        
        g2.setColor( new Color( 20, 0, 200 ) );
        g2.fill( r1 );
        
        g2.setColor( new Color( 255, 48, 48 ) );
        g2.fill( r2 );
        
        g.setColor( Color.MAGENTA );
        Rectangle x1 = r1.intersection(r2);
       
       
        
        if(x1.width > 0)
        {
	        g2.draw( x1 );
	        g.fillRect(x1.x, x1.y, x1.width, x1.height);
	        System.out.println(x1);
        }
    }
 
    public static void main( String[] args ){
        test e = new test();
 
        JFrame f = new JFrame( "Quadrat" );
        f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        f.setSize( 450, 450 );
        f.add( e );
        f.setVisible( true );
    }
}
```

Danke schon mal


----------



## Runtime (5. Dez 2010)

Und wo ist die Frage?


----------



## kleeneQueen (5. Dez 2010)

ich darf intersection nicht benutzen...


```
Rectangle x1 = r1.intersection(r2);
```

das muss da raus und ein eigener code muss für die schnittfläche geschrieben werden... 
nur weiß ich leider nicht wie ich da vor gehen soll...


----------



## Runtime (5. Dez 2010)

Ein Denkanstoss:

Wenn es nur Rechtecke sind, kannst du die X-Achse und die Y-Achse wie 1-Dimensional berechnen:


----------



## kleeneQueen (5. Dez 2010)

ja genau so soll das gehen... 
aber WIE genau geht das? ich will mir später nämlich die genauen Koordinaten auf der konsole ausgeben lassen


----------



## Runtime (5. Dez 2010)

Machen musst dus schon selber, ich habs ja praktisch schon gemacht, aber nochmal, 1Dimensional:


----------



## mariusbopp (5. Dez 2010)

???:L mir leuchtet es aber auch nicht ein grade...
kannst du es vielleicht noch etwas konkretisieren??


----------



## Runtime (5. Dez 2010)

Ok, dann Pseudocode:

```
funktion intersection1d(pos1, size1, pos2, size2) {
 if(pos1 == pos2) {
  gib Math.min(size1, size2) und pos1 zurück;
 } else if(pos1 < pos2) {
  if(pos1 + size1 <= pos2) keine Intersection;
  else {
   gib pos1 + size1 - pos2 und pos2 zurück;
  }
 } else {
  if(pos2 + size2 <= pos1) keine Intersection;
  else {
   gib pos2 + size2 - pos1 und pos1 zurück;
  }
 }
}

function rectIntersection(rect1, rect2) {
 return new Rectangle(intersection1d(rect1.x, rect1.width, rect2.x, rect2.width), 
  intersection1d(rect1.y, rect1.height, rect2.y, rect2.height));
}
```

Sollte so funktionieren.


----------



## mariusbopp (5. Dez 2010)

danke mit sowas kann ich schon mehr anfangen wie mit dem vorher!!:toll:

danke dir schonmal soweit


----------



## Runtime (5. Dez 2010)

Klar kannst du mehr anfangen wenn ich schon 99% gemacht hab . Hast dus schon getestet? Funktionierts?


----------



## Flado (9. Dez 2010)

Hi,

hab das Ganze mal ausprobiert und bin an deinen Formulierungen "pos1, pos2, size1, size2" gescheitert.

Ich benutze x, y, height und width um ein Rechteck darzustellen.

Wie komm ich damit auf deine pos und size und vor allem, wie komm ich wieder zurück zu x, y, height, width?

Wär cool wenn du mir hier weiterhelfen könntest, bin blutiger Anfänger was Java angeht :rtfm:


----------



## Runtime (9. Dez 2010)

Pos1 ist die Position des 1. Rechtecks rsp: x1 oder y1
Pos2 ist die Position des 2. Rechtecks rsp: x2 oder y2
Size1 ist die Grösse des 1. Rechtecks rsp: width1 oder height1
Size2 ist die Grösse des 2. Rechtecks rsp: width2 oder height2


----------

