Kontrolieren ob ein Variablen Wert zwischen 2 anderen Variablen Werten ist



  • hallo

    ich schreibe gerade ein programm in dem ich kontrollieren soll
    ob das erste rechteck im zweiten rechteck ist und umegekehr

    ich hab zu jebem rechteck den linlen oberen punkt und den recht unteren punkt

    so jetzt zur frage

    kann ich in der if-Bedingung fR1P1<fR2P1<fR1P2 eingeben
    fR1 sind die punkte des ersten rechtecks

    falls noch was unklar einfach fragen

    dark greetz haku



  • Haku schrieb:

    kann ich in der if-Bedingung fR1P1<fR2P1<fR1P2 eingeben

    Wenn fR1P1<fR2P1 irgendwas ergibt, was mit fR1P2 verglichen werden kann, rein syntaktisch gesehen ja.

    Nur wird das nicht das ergeben, was du möchtest. Viel mehr kann man dir so nicht sagen.

    Für weitere Hilfe halte dich bitte an das gute Benehmen im Netz und lies dir vor deinen Fragen die mit wichtig gekennzeichneten Threads hier im Forum durch. Zwei davon erreichst du auch durch die Links in meiner Singatur.



  • a < b < c einfach als (a < b) && (b < c) schreiben.



  • Natürlich muss auch der "operator<" überladen sein, so dass er deine "Punkt"-Klasse annimmt.



  • Das ist eine geometrische Frage, also erst einmal ein Blatt Papier her.

    o---o
     |   |
     o---o
           o---o
           |   |
           o---o
    
     o---o
     |   |
     o---o---o
         |   |
         o---o
    
     o---o
     |  o+--o
     o--+o  |
        o---o
    
     o-----o
     |    o+--o
     |    ||  |
     |    o+--o
     o-----o
    
     o-----o
     |o---o|
     ||   ||
     |o---o|
     o-----o
    
     o----oo--o
     |    ||  |
     |    ||  |
     |    o+--o
     o-----o
    
     o---o
     |   o---o
     o---o   |
         o---o
    

    Wenn mindestens eine Ecke in dem anderen Rechteck liegt, gibt es eine Überschneidung. War das die Frage?

    struct Vector
    {
    	int x, y;
    	Vector();
    	Vector(int x, int y);
    };
    
    struct Rect
    {
    	Vector topLeft, bottomRight;
    };
    
    bool isInside(const Rect &rect, const Vector &point)
    {
    	return
    		(point.x >= rect.topLeft.x) &&
    		(point.y >= rect.topLeft.y) &&
    		(point.x <= rect.bottomRight.x) &&
    		(point.y <= rect.bottomRight.y);
    }
    
    Vector topRight(const Rect &rect)
    {
    	return Vector(rect.bottomRight.x, rect.topLeft.y);
    }
    
    Vector bottomLeft(const Rect &rect)
    {
    	return Vector(rect.topLeft.x, rect.bottomRight.y);
    }
    
    size_t countVerticesInside(const Rect &area, const Rect &vertices)
    {
    	size_t count = 0;
    	count += isInside(area, vertices.topLeft);
    	count += isInside(area, vertices.bottomRight);
    	count += isInside(area, topRight(vertices));
    	count += isInside(area, bottomLeft(vertices));
    	return count;
    }
    
    bool intersect(const Rect &first, const Rect &second)
    {
    	const size_t verticesInFirst = countVerticesInside(first, second);
    	const size_t verticesInSecond = countVerticesInside(second, first);
    	return (verticesInFirst > 0) || (verticesInSecond > 0);
    }
    

    EDIT: Das soll erst einmal reichen.


Anmelden zum Antworten