Schnittfläche von Rechtecken

kleeneQueen

Mitglied
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 ^^
Java:
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 :)
 

kleeneQueen

Mitglied
ich darf intersection nicht benutzen...

Java:
 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

Top Contributor
Ein Denkanstoss:

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

Anhänge

  • Intersection.png
    Intersection.png
    5 KB · Aufrufe: 61

Runtime

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

Anhänge

  • Intersection2.png
    Intersection2.png
    4,6 KB · Aufrufe: 77

Runtime

Top Contributor
Ok, dann Pseudocode:
Code:
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.
 

Flado

Neues Mitglied
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

Top Contributor
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
 

Ähnliche Java Themen


Oben