Aufgabe mit Rechtecken
-
Hallo,
ich habe derzeit ein Problem mit einer Aufgabe und würde mich über ein paar Tipps freuen. Das folgende Bild demonstriert ein Beispiel.
http://img90.imageshack.us/img90/9679/rechteckecs4.png
Man soll nun in einem Programm 4 Koordinatenpunkte übergeben. 2 Punkte spannen ein Rechteck auf. Und nun soll das Programm ausgeben ob sich beispielsweise die Rechtecke schneiden (R und E) oder an den Ecken berühren, so wie Rechteck R und C.
Ich möchte keinen Code haben, es geht mir nur um den besten Weg das zu erreichen ohne in eine if-else Manie zu verfallen. Freue mich über jeden Tipp.

-
Naja erstmal halt ne Klasse anlegen ... so pseudocode:
class rectangle { Point m_ptEdges[2]; public: rectangle(unsigned long x, unsigned long y, unsigned int width, unsigned int height); rectangle(const Point& lefttop, const Point& bottomright); public: bool edge_collide(const rectangle& rect) { Point edges[4]; edges[0] = rect.m_ptEdges[0]; // top - left edges[1].x = rect.m_ptEdges[0].y; // top - right edges[1].y = rect.m_ptEdges[1].x; edges[2] = rect.m_ptEdges[1]; // bottom - right edges[3].x = rect.m_ptEdges[1].y; // bottom - left edges[3].y = rect.m_ptEdges[0].x; return (edges[0] == ...); } };usw. also sollte doch gehen ...
-
Hi,
danke rstmal für den Beitrag! Klassen darf ich dafür noch nicht nutzen. Aber unabhängig davon interessiert mich vielmehr der Lösungsansatz, also wie ich am geschicktesten mit den Rechtecken arbeite?
Beispielsweise ob ich auf Vektoren zurückgreifen soll? Denn die Frage wie sich die zwei aufgespannten Rechtecke in die Quere kommen ist dabei die interessante.
Als Beispiel man die 4 Koordinaten.
P(2,2) Q(7,4) - S(2,2) T(0,0)
Die beiden Rechtecke berühren sich in einem Punkt, während sich
P(2,2) Q(7,4) - S(2,2) T(3,3)
nicht in einem Punkt berühren sondern das erste Rechteck das zweite vollkommen beinhaltet.
Meine Frage nun. Wie realisiere ich das mathematisch am besten?

-
Viel Mathe brauchst du da nicht.
Brauchst nur ein paar if Bedingungen mit denen du prüfst, ob ein Eckpunkt zwischen den Punkten des anderen Rechtecks liegt.
if(P.x > S.x && P.x < T.x ...
-
wenn keine klasse verwenden drafst, nimm nen struct

-
Bommeli schrieb:
Man soll nun in einem Programm 4 Koordinatenpunkte übergeben. 2 Punkte spannen ein Rechteck auf. Und nun soll das Programm ausgeben ob sich beispielsweise die Rechtecke schneiden (R und E) oder an den Ecken berühren, so wie Rechteck R und C.
würd mir für so eine aufgabe ne c-typische signatur hernehmen
struct Point{ int x, y; }; struct Rect{ Point upperleft, lowerright; }; bool intersect(const Rect *r1, const Rect *r2, Rect *intersection);die function intersect gibt dabei nen bool'schen wert zurück, der bestimmt, ob sich die beiden rechtecke r1 und r2 schneiden und im rect intersection wird das von den schnittpunkten aufgespannte rechteck gespeichert. wenns nur eine ecke ist, dann sind beide punkte von intersection halt identisch.
-
Ich darf auch keinen struct verwenden.

Das alles soll mit ganz einfachen Kontrollstrukturen und Schleifen ablaufen. Keine Klassenobjekte, keine Arrays und keine STL.
@ÜberraschungsKuh:
Hmm, das klingt gut. Nur wie löse ich das am geschicktesten mit ein "paar if Bedingungen"?
Ein Beispiel in Pseudocode für den Fall das sich die Eckpunkte berühren wäre nicht schlecht.
-
Bommeli schrieb:
Ich darf auch keinen struct verwenden.
halte ich zwar für hochgradig blödsinnig, aber dann machst aus den points und rects halt lauter ints.
-
thordk schrieb:
Bommeli schrieb:
Ich darf auch keinen struct verwenden.
halte ich zwar für hochgradig blödsinnig, aber dann machst aus den points und rects halt lauter ints.
Also noch einmal. Es geht mir nicht um die Darstellung! Ich weiß wie ich das löse.
Es geht mir um den bestmöglichen Lösungsansatz für die Aufgabe. Wie implementiere ich die Aufgabe am besten? Ob ich das nun objektorientiert oder prozedural mache spielt hier keine Rolle.
-
du hast ein Koordinaten system mit ein best . höhe und breite mit ensprechenden Raster.
deine Rechtecke haben 4 Attribute bzw. zwei Punkte(x/y) 1.(rechts/unten) und 2.(links/oben)
und wie Überraschungskuh schon sagte bruachst du nun mal ne if bedingungen um zu prüfen ob ein punkt in einem rechteck liegt!
Point target (x,y); Rect rc(Point(x,y),Point(x,y)); if(target.x>=rc.right && target.x <= rc.left && target.y >= rc.bottom && target.y <=rc.top) //im Rechteck