#include 
#include 
#include 
#include 
#include 

using namespace std;

// Headers
string toString (double);
int toInt (string);
double toDouble (string);
double area(double x1, double y1, double x2, double y2, double x3, double y3);
bool isInside(double x1, double y1, double x2, double y2, double x3, double y3, double x, double y);

int main() {
  
    // Zu Beginn werden die Variablen für die acht Koordinaten, jeder der vier Punkte besitzt, eine y und x Koordinaten, deklariert.
    // Koordinaten für A (x1,y1)
    double x1;
    double y1;
    
    // Koordinaten für B (x2,y2)
    double x2;
    double y2;
    
    // Koordinaten für C (x3,y3)
    double x3;
    double y3;
    
    // Koordinaten von P(x,y)
    double x;
    double y;
    
    // Jetzt werden die Koordinaten für A abgefragt, zuerst der X-Wert und dann der Y-Wert.
    cout << "X-Koordinate x1 von A(x1,y1)" << endl;
    cin >> x1;
    cout << "Y-Koordinate y1 von A(x1,y1)" << endl;
    cin >> y1;
    
    // Jetzt die Koordinaten x2 und y2 von B(x2,y2).
    cout << "X-Koordinate x2 von B(x2,y2)" << endl;
    cin >> x2;
    cout << "Y-Koordinate y2 von B(x2,y2)" << endl;
    cin >> y2;
    
    // Am Schluss die Koordinaten von C(x3,y3)
    cout << "X-Koordinate x3 von C(x3,y3)" << endl;
    cin >> x3;
    cout << "Y-Koordinate y3 von C(x3,y3)" << endl;
    cin >> y3;
    
    // Die Koordinaten des Punktes P
    cout << "Die X-Koordinate von P(x,y)" << endl;
    cin >> x;
    cout << "Die Y-Koordinate von P(x,y)" << endl;
    cin >> y;
    
    // Die eingegebenen Werte werden jetzt an die Funktion isInside übergeben.Der Rückgabewert dieser Funktion ist entweder true oder false. Im Fall, dass sich der Punkt P innerhalb des Dreiecks befindet, gibt die Funktion isInside den Wert true zurück, anderfalls den Wert false.
    if (isInside(x1, y1, x2, y2, x3, y3, x, y)) {
        cout << "Der Punkt P(" << x << "," << y << ") befindet sich innerhalb des Dreiecks" << endl;
    } else {
        cout << "Der Punkt P befindet sich nicht innerhalb des Dreiecks." << endl;
    }
    return 0;
}

double area(double x1, double y1, double x2, double y2, double x3, double y3) {
    // Die Funktion Area berechnet anhand der x und y Koordinaten der Punkte die Fläche der Dreiecke. Und gibt das entsprechende Ergebnis zurück.
    double resultat;
    
    resultat = fabs((x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0);
    
    return resultat;
}

bool isInside(double x1, double y1, double x2, double y2, double x3, double y3, double x, double y) {
    // Die Funktion isInside ruft für die Berechnung der Fläche der Dreiecke die Funktion Area auf, die wiederum anhand der Koordinatenwerte die Fläche der einzelnen Dreiecke berechnet.
    // Zuerst werden die vier Variablen für die Ergebnisse der Flächenberechnung deklariert.
    double a;
    double a1;
    double a2;
    double a3;
    
    // Dann die Boolesche Variable result, die der Rückgabewert der Funktion isInside ist.
    bool resultat;
    
    // Die Fläche des Dreiecks ABC mit Hilfe der Funktion Area berechnen.
    a = area(x1, y1, x2, y2, x3, y3);
    
    // Die Fläche des Dreiecks PBC mit Area berechnen.
    a1 = area(x, y, x2, y2, x3, y3);
    
    // Die Fläche des Dreiecks PAC mit Area berechnen.
    a2 = area(x, y, x1, y1, x3, y3);
    
    // Die Fläche des Dreiecks PAB mit Area berechnen.
    a3 = area(x, y, x1, y1, x2, y2);
    
    // In der nachfolgenden Fallunterscheidung wird geprüft, ob die Fläche des ursprünglichen Dreiecks (ABC) mit der Summe der drei Dreiecke, die durch die hinzunahme von P gebildet wurden, übereinstimmt. Im Fall, dass die beiden Wert gleich sind, wird der Variablen result der Wert true zugewiesen, andernfalls der Wert false.
    if (a == a1 + a2 + a3) {
        resultat = true;
    } else {
        resultat = false;
    }
    
    return resultat;
}

// Im Folgenden werden Funktionen zur Typumwandlung implementiert.
string toString (double value) { //int auch
    stringstream temp;
    temp << value;
    return temp.str();
}

int toInt (string text) {
    return atoi(text.c_str());
}

double toDouble (string text) {
    return atof(text.c_str());
}
        
        
akzeptieren ablehen

Diese Website verwendet Cookies und Zählpixel, um Ihnen die bestmögliche Nutzung dieser Website zu ermöglichen.Learn more about cookies sehen Sie auch Datenschutz