Java-Methode, um das Rechteck, das ist der Schnittpunkt von zwei Rechtecke, die nur mithilfe der linken unteren Punkt, die Breite und Höhe?
Habe ich die Lösung gefunden, aber wollte sicher gehen, dass meine Logik ist die effizienteste. Ich fühle, dass es einen besseren Weg gibt. Ich habe die (x,y) - Koordinate der unteren linken Ecke, Höhe und Breite von 2 Rechtecke, und ich brauche, um wieder eine Dritte Rechteck, das Ihre überschneidung. Ich möchte nicht nach dem code, wie ich finde, es ist Betrug.
- Ich herausfinden, welche am weitesten Links und die höchste auf dem Graphen.
- Ich prüfen, ob eine komplett überschneidet sich der andere, und Umgekehrt, um zu sehen, wenn der andere komplett überlappt die erste auf der X-Achse.
- Ich prüfen, ob teilweise Schnittpunkt auf der X-Achse.
- Ich im Grunde wiederholen Sie die Schritte 2 und 3 für die Y-Achse.
- Ich tun, etwas Mathe und bekommen die Punkte des Rechtecks auf der Grundlage dieser Bedingungen.
Ich kann über denken und schreiben ineffizienten code. Ich habe schon in ein funktionierendes Programm, aber würde gerne den besten Weg finden für mein eigenes wissen. Wenn jemand könnte entweder Zustimmen oder zeigen Sie mich in die richtige Richtung, das wäre toll!
Ich weiß nicht, ob das helfen würde, aber es befasst sich mit der Bestimmung der collesion Punkt von einem sich bewegenden Objekt ... example
Definitiv geschätzt! Ich dachte, es könnte zu tun haben. Ich konnte nichts finden im internet, reduziert es bis zu meinem konkreten Beispiel. Hoffentlich, was ich Tat, war nahe genug, um effizient. Danke!!!
Definitiv geschätzt! Ich dachte, es könnte zu tun haben. Ich konnte nichts finden im internet, reduziert es bis zu meinem konkreten Beispiel. Hoffentlich, was ich Tat, war nahe genug, um effizient. Danke!!!
InformationsquelleAutor Doug B | 2013-01-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht JDK-API, um dies für Sie tun?
Verwenden
java.awt.Rectangle
Klasse, die Parameter des Konstruktors sind: x, y, Breite, Höhe, in welcher x und y die Obere linke Ecke des Rechtecks. Sie können ganz einfach konvertieren Sie den unteren linken Punkt nach oben-Links.Empfehle ich die oben genannten, aber wenn Sie wirklich wollen, es selbst zu tun, können Sie die Schritte unten:
sagen
(x1, y1), (x2, y2)
sind die unteren linken und unteren rechten Ecken der Rect1 bzw.(x3, y3), (x4, y4)
sind die von Rect2.x1
,x3
und die kleinere vonx2
,x4
sagenxL
,xR
bzw.xL >= xR
, dann zurück, kein Schnitt sonsty1
,y3
und die kleinere vony2
,y4
sagenyT
,yB
bzw.yT >= yB
, dann zurück, kein Schnitt sonst(xL, yB, xR-xL, yB-yT)
.Einer Java-ähnlichen pseudo-code:
Wie Sie sehen, wenn Ihr Rechteck wurde ursprünglich definiert durch zwei Diagonale Ecken, wird es leichter sein, Sie müssen nur
//find intersection
Teil.Diese pseudo-code ist falsch.
Ich denke, dass beide int xR = Math.max(x2, x4) und int yB = Math.max(y2, y4) sollte geändert werden, um Math.min(...)
Sorry Jungs, die ursprüngliche pseudo-code nicht kompatibel ist mit der inline-Schritte, die ich korrigiert haben.
Sorry Jungs, die ursprüngliche pseudo-code nicht kompatibel ist mit der inline-Schritte, die ich korrigiert haben.
InformationsquelleAutor shuangwhywhy
Die akzeptierte Antwort ist falsch. Hier ist meine version, das ist richtig.
Verwenden Sie nicht die akzeptierte Antwort.
out
enthält der Kreuzung, wenn es vorhanden ist. Es gibt sogar Dokumentationen, die erklären, dass... Auch, seine mehr lesbar sind wie die Variablen benannt werden deutlicher. Lassen Sie mich wissen, wenn ich kann klar alles andere für Sie.Bah! Sah nur die
out
parameter, so ist es Recht, wenn Sie wollen, um eine nominelle änderung, ich werde entfernen Sie den down-vote. Ich immer noch sagen, es ist nicht so, dass lesbar (denken Sie daran, Ihren eigenen code ist immer lesbar, das bedeutet nicht, dass jemand anderes es Lesen kann), aber das ist eine Grenze religiösen argument, und das ist Mathematik, die wir hier reden.Das ist definitiv wahr. Ich habe bearbeitet meine Antwort, um Kommentare zu entfernen, die auf Lesbarkeit @rob
Cool, der Grund, dass diese korrekt über die akzeptierte Antwort ist noch nicht offensichtlich, obwohl, möchten Sie vielleicht zu erarbeiten, wie gut.
float xmin = Math.max(r1.x, r2.x);
Xmin gleich Mathe.Max? Das ist verwirrendInformationsquelleAutor William Morrison
Können Sie auch das Rechteck-source-code vergleichen Sie mit Ihrem eigenen Algorithmus:
InformationsquelleAutor Michaël Sanchez