Mathematisches Problem mit C++ lösen
-
Hallo,
habe ein Mathematisches Problem, dass ich mit C++ lösen muss.
Es ist wohl über cos und sin zu machen, nur leider komme ich erst jetzt in Klasse 10 wo es an meiner Schule behandelt wird, sprich, ich habe keine Ahnung davon.
Wäre schön wenn ihr mir die Lösund geben könntet und die eventuell noch ein bisschen erklären könntet.
Ein bisschen habe ich schon über cos und sin gelesen und habe auch geometrisches Wissen was viele Fachbegriffe angeht, nur soviel schonmal, dass die Erklärungen nicht unnötig detail-reich sind.
Habe das ganze mal in diese Skitze gepackt:
http://floorball92.rockt.es/skitze2.pngGrus Sebastian
ps: habe das hier rein gepackt, weil ich es ja mit C++ lösen muss, wenn das Mathematik Forum besser gewesen wäre, bitte verzeihen + verschieben

-
Bei mir wird da nix angezeigt
Außerdem, hast du schon was programmiert?
-
also habe gerade noch mal geprüft, der Link geht bei mir.
Nein, habe noch nichts programmiert, habe im vorfeld mal das ganze etwas durchdacht und da ist mir aufgefallen, dass mir dazu nichts einfällt.
-
Ist doch eigentlich ganz einfach
http://de.wikipedia.org/wiki/Bild:Winkelfunktionen_Einheitskreis.svg
-
demnach wäre auf der Skitze D (sin(x)/cos(x)), aber das kann ja net sein.
-
@bild
so wie das aussieht handelt es sich in dem Bild vom OP um kein rechwinkliges Dreieck, in deinem Bild schon

-
Einheitskreis r=1 bei dir r=10, also mal 10
Und dann auch noch beachten wie der winkel gemessen werden muss.Firefighter schrieb:
@bild
so wie das aussieht handelt es sich in dem Bild vom OP um kein rechwinkliges Dreieck, in deinem Bild schon
Beim OP ist erst mal kein Dreieck sondern ein Kreissegment zu sehen, das Dreieck kann man sich denken.
-
Sehe ich das richtig, dass dies ein Kreissegment ist, also b=c?
Wenn ja, wäre vielleicht allgemein die Umwandlung von x-y-Koordinaten in Polar-Koordinaten und zurück das richtige Programm, denn die Polarkoordinaten vom Punkt B sind Radius r=c=b und Winkel phi=90°. Bei Punkt C sind r=b=c und phi=90°-20°=70°. Input wäre dann b,70° und Output C(x,y).Regel:
Aus der Definition der Winkelfunktionen ergibt sich unmittelbar x = r * cos(phi) und y = r * sin(phi).Umgekehrt werden die Polar- aus den kartesischen Koordinaten mittels r2 = x2 + y2 und tan(phi) = y/x berechnet. Ist x > 0, so ist phi durch atan(y/x) gegeben, ansonsten ist noch 180° (im Bogenmaß pi) hinzuzufügen oder abzuziehen, was auf dasselbe hinausläuft.
Dein Punkt C wäre also durch C( b*cos(70°), b*sin(70°) ) beschreibbar.
Ergibt: C( b*0.342 , b*0.94 ) oder mit b=10 C(3.42, 9.4)
Hilft das weiter?
Ich gebe Dir nur ein Programm zum Überprüfen des Winkels phi:
#include <cmath> #include <limits> #include <iostream> using namespace std; float polarangle(float objx, float objy, float centx=0, float centy=0) { float x, y, phi; y = objy - centy; x = objx - centx; if ((x == 0) && (y < 0)) { return 270;} // avoid division by zero if ((x == 0) && (y > 0)) { return 90; } // avoid division by zero if ((x == 0) && (y == 0)) { return 0; } // points overlap, no angle phi = atan(y/x) * 180/3.14159; // calling arctan and converting radians to degree's if (x < 0) { return (phi + 180); } else return phi; } void wait() { std::cin.clear(); std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get(); } int main() { float x,y; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; cout << "X: " << x << " Y: " << y << " Winkel phi: " << polarangle(x,y) << " degrees" << endl; wait(); }X: 3.42
Y: 9.4
X: 3.42 Y: 9.4 Winkel phi: 70.0072 degrees
-
Also wenn ich das richtig verstanden habe, dann würde dieses Programm korrekt arbeiten:
#include <iostream> #include <cmath> using namespace std; int main(void) { int b; double winkel; double Cx, Cy; cout << "Koordinaten von C errechnen" << endl; cout << "+++++++++++++++++++++++++++" << endl; cout << "\nb: "; cin >> b; cout << "Winkel (vom Lot auf b): "; cin >> winkel; if(winkel == 0){ Cx = 0; Cy = b; } else{ Cx = floor(b*cos(90.0-winkel)); Cy = floor(b*sin(90.0-winkel)); } cout << "\nC (" << Cx << "/" << Cy << ")" << endl; return(0); }Wenn ja, dann habe ich es verstanden.
Gruß
EDIT:
Oh, habe deinen letzten Post nicht mehr mitbekommen, werde da mal reinschauen.
-
Ja, sieht sehr gut aus. Allerdings rechnet die sin- und cos-Funktion mit "radians", das sind 360° = 2*pi. Daher musst Du die "degrees" in "radians" umrechnen:
Cx = b*cos((90.0-winkel)/180*3.14159); Cy = b*sin((90.0-winkel)/180*3.14159);Vorzeichen noch beachten, wenn sich das ganze in andere Quadranten verschiebt.
Polarkoordinaten:
http://de.wikipedia.org/wiki/Polarkoordinaten
-
Das ist doch nix weiter als drehung der Koordinaten, d.h. Drehmatrix mal vektor
schauste hier.grüße
-
Erhard Henkes schrieb:
Ich gebe Dir nur ein Programm zum Überprüfen des Winkels phi:
#include <cmath> #include <limits> #include <iostream> using namespace std; float polarangle(float objx, float objy, float centx=0, float centy=0) { float x, y, phi; y = objy - centy; x = objx - centx; if ((x == 0) && (y < 0)) { return 270;} // avoid division by zero if ((x == 0) && (y > 0)) { return 90; } // avoid division by zero if ((x == 0) && (y == 0)) { return 0; } // points overlap, no angle phi = atan(y/x) * 180/3.14159; // calling arctan and converting radians to degree's if (x < 0) { return (phi + 180); } else return phi; }Hallo Erhard,
um sich das if( x== 0) oder fast 0(!?) und die anderen Fallunterscheidungen zu ersparen gibt es die Funktion
atan2( y, x );Die Konstante PI sollte man sich immer von der eingebauten Bibliothek liefern lassen. Entweder mit
const double PI = std::acos( -1.0 );oder
const double PI = 4 * std::atan( 1.0 );Gruß
Werner
-
Man kann es auch extrem kompliziert lösen.^^
Schau hier:
http://de.wikipedia.org/wiki/Skalarprodukt(cos lösen mithilfe des Taschenrechners ;))
dann brauchst du noch eine zweite Gl.
da du die Länge von c kennst, hast du noch eine Bedingung an den Vektor A, da nimmst du einfach die Länge sprich: sqrt(C1^2 + C2^2)
dann einfach mittels Elimination der Variablen beide Einträge für C bestimmen.
Diese Variante hat neben nur 5mins Rechnen auch noch den Vorteil, das sie auf jedem Vektorraum über dem du ein Skalarrpodukt definieren kannst gültig ist. Sprich, du kannst damit Relativitätstheorie und Stringtheorie betreiben, wobei das in Klasse 10 wohl etwas unüblich ist.