Vektorberechnung zweier Punkte mit Betrag.



  • Hallo zusammen 😉

    Ich versuche eigentlich immer mein neu dazugelerntes C++ wissen umzusetzen in kleine Spezialtaschenrechner.

    Ich wollte ein kleines Konsolenprogramm schreiben welches Vierecke aus dem KS auf Rechtwinkligkeit überprüft.

    Bin jetzt folgendermaßen vorgegangen... (Satz des Pythagoras)

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main() {
    	double xa, ya, xb, yb, xc, yc, xd, yd, disab, disbc, discd, disda, diaac, diabd, kat1, kat2, kat3, kat4, hyp1, hyp2, vecac, vecdb;
    	// Eingabe der Koordinaten
    	cout << "X Koordinate von Punkt A..     ";
    	cin >> xa;
    	cout << "Y Koordinate von Punkt A..     ";
    	cin >> ya;
    	cout << "X Koordinate von Punkt B..     ";
    	cin >> xb;
    	cout << "Y Koordinate von Punkt B..     ";
    	cin >> yb;
    	cout << "X Koordinate von Punkt C..     ";
    	cin >> xc;
    	cout << "Y Koordinate von Punkt C..     ";
    	cin >> yc;
    	cout << "X Koordinate von Punkt D..     ";
    	cin >> xd;
    	cout << "Y Koordinate von Punkt D..     ";
    	cin >> yd;
    	// Berechnung der Streckenlängen
    	disab = sqrt( pow(xb-xa, 2) + pow(yb-ya, 2) );
    	disbc = sqrt( pow(xc-xb, 2) + pow(yc-yb, 2) );
    	discd = sqrt( pow(xd-xc, 2) + pow(yd-yc, 2) );
    	disda = sqrt( pow(xa-xd, 2) + pow(ya-yd, 2) );
    	diaac = sqrt( pow(xc-xa, 2) + pow(yc-ya, 2) );
    	diabd = sqrt( pow(xd-xb, 2) + pow(yd-yb, 2) );
    	// Berechnung der Kathetenquadrate
    	kat1 = pow(xb-xa, 2);
    	kat2 = pow(xc-xa, 2);
    	kat3 = pow(xd-xc, 2);
    	kat4 = pow(xa-xd, 2);
    	// Berechnung der Hypotenusenquadrate
    	hyp1 = Hier sollte der Betrag vom vecac Quadriert werden!
        hyp2 = Hier sollte der Betrag vom vecdb Quadriert werden!
        // Vergleich auf Rechte winkel
        hyp1 = kat1 + kat2 || kat3 + kat4;
        hyp2 = kat1 + kat2 || kat3 + kat4;
    	// Ausgabe der Streckenlängen
    	cout << "Die Strecke   AB betraegt: " << disab << endl;
    	cout << "Die Strecke   BC betraegt: " << disbc << endl;
    	cout << "Die Strecke   CD betraegt: " << discd << endl;
    	cout << "Die Strecke   DA betraegt: " << disda << endl;
    	cout << "Die Diagonale AC betraegt: " << diaac << endl;
    	cout << "Die Diagonale BD betraegt: " << diabd << endl;
    	return 0;
    }
    

    Den rest der Ausgabe schaffe ich schon....

    Tja mein Problem ist das ich es etwas umständlich finde einen Vektor "auszudrücken" wie zB 6 über 3 und davon dann den Betrag zu berechne.

    Meine derzeitige möglichkeit währe eigentlich nur den Vektor in 2 Teile zu zerlegen und damit zu arbeiten. Aber es gibt doch sicher auch eine spezielle schreibweiße für Vektoren oder???

    Falls auch nicht könnte mir da vielleicht jemand etwas hilfestellung oder einen Tipp geben? Es sind denke ich mal schon genug double Variablen deklariert und es ist ja eigentlich auch ein kleines Programm c0

    Vielen dank schonmal im vorraus, day! 🙂



  • Ich weiss nicht, ob du dich dazu schon genügend mit C++ auskennst, aber grundsätzlich dienen Klassen dazu, mehrere Eigenschaften zusammenzufassen und einen eigenen Typ zu repräsentieren.

    Entweder du lässt das vorerst und lernst zuerst die grundlegenderen Dinge, oder du schaust dir Klassen in deinem C++-Buch an. Aber so schnell, schnell sind die nicht erklärt.



  • na super.. 😢

    Also das geht nur mit Klassen (richtig) sozusagen, leider bin ich erst bei Strings und Adressen ... wird wohl noch etwas dauern.

    Wenn es sonst keine funktion.. zB in math.h oder so gibt dann danke schonmal für die Antwort dann muss ich das wohl etwas "schlampiger" und temporär lösen :p



  • Ich empfehle dir auf jeden Fall, erstmal ein Tutorial für Einsteiger und/oder ein gutes Buch durchzuarbeiten. Das wird dir dann erklären was Funktionen, Klassen und Objekte sind. Damit kannst du dann deinen Code schonmal deutlich vereinfachen.



  • daybreak schrieb:

    Also das geht nur mit Klassen (richtig) sozusagen, leider bin ich erst bei Strings und Adressen ... wird wohl noch etwas dauern.

    Wenn es sonst keine funktion.. zB in math.h oder so gibt dann danke schonmal für die Antwort dann muss ich das wohl etwas "schlampiger" und temporär lösen :p

    Es gibt da schon was - schau Dir mal std::complex<double> an. Die lassen sich wie Vektoren (im mathematischen Sinne) nutzen. D.h. Addition Subtraktion und Betrag bestimmen ist eingebaut - auch lassen sie sich einlesen und ausgeben.

    Für das was Du vorhast, reicht es allemal.

    Gruß
    Werner



  • Werner Salomon schrieb:

    daybreak schrieb:

    Also das geht nur mit Klassen (richtig) sozusagen, leider bin ich erst bei Strings und Adressen ... wird wohl noch etwas dauern.

    Wenn es sonst keine funktion.. zB in math.h oder so gibt dann danke schonmal für die Antwort dann muss ich das wohl etwas "schlampiger" und temporär lösen :p

    Es gibt da schon was - schau Dir mal std::complex<double> an. Die lassen sich wie Vektoren (im mathematischen Sinne) nutzen. D.h. Addition Subtraktion und Betrag bestimmen ist eingebaut - auch lassen sie sich einlesen und ausgeben.

    Für das was Du vorhast, reicht es allemal.

    Gruß
    Werner

    Und Dein Kartoffelpüree machst Du mit der Kaffemaschine. 💡



  • Naja also soooo schlampig und unübersichtlich oder zuviel finde ich mein erstes Programm eigentlich nicht... außer es gibt möglichkeiten Ausgabe und Eingabe bzw Deklaration noch zu verkürzen... aber ich denk mal die sind mir noch nicht bekannt.



  • Vielleicht solltest Du eine Klasse für Vektoren zusammenbasteln und ihr möglichst viel Funktionalität aufdrücken. Das würde die Hauptfunktion hübscher machen.

    #include <iostream>
    #include <cmath>
    #include "MathVector.h"
    using namespace std;
    
    int main() {
    	cout << "Vektor A eingeben";
             MathVektor a(cin);
    	cout << "Vektor B eingeben";
             MathVektor b(cin);
    	cout << "Vektor C eingeben";
             MathVektor c(cin);
    	cout << "Vektor D eingeben";
             MathVektor d(cin);
    
    	cout << "Die Strecke   AB betraegt: " << abs(a-b) << endl;
    	cout << "Die Strecke   BC betraegt: " << abs(b-c) << endl;
    	cout << "Die Strecke   CD betraegt: " << abs(c-d) << endl;
    	cout << "Die Strecke   DA betraegt: " << abs(d-a) << endl;
    	cout << "Die Strecke   AC betraegt: " << abs(a-c) << endl;
    	cout << "Die Strecke   BD betraegt: " << abs(b-d) << endl;
    	return 0;
    }
    

Anmelden zum Antworten