Yahoo Clever wird am 4. Mai 2021 (Eastern Time, Zeitzone US-Ostküste) eingestellt. Ab dem 20. April 2021 (Eastern Time) ist die Website von Yahoo Clever nur noch im reinen Lesemodus verfügbar. Andere Yahoo Produkte oder Dienste oder Ihr Yahoo Account sind von diesen Änderungen nicht betroffen. Auf dieser Hilfeseite finden Sie weitere Informationen zur Einstellung von Yahoo Clever und dazu, wie Sie Ihre Daten herunterladen.
Mathe und so?
Hallo, ich habe ein kleines Mathematisches Problem.
Ich möchte oder muß eher gesagt einen Knopf programmieren der sich im Kreisbewegt. Also hab ich mir gedacht brauch ich die Formel von einem Kreis
um die zu bekommen dachte ich mir ich setze Punkte in einem Koordinatensystem jeweils 4 Punkte vom Mittelpunkt entfernt um die Formel von 2 gegensätzlichen gestauchten Parabeln herauszubekommen.
Ergebnis= -1/4x²+4
aber wenn ich das jetzt mal im Kos nachzeichne, bekomme ich eher eine Elipse und keinen Kreis.
Kann mir da vielleicht jemand weiterhelfen? Wäre nett. Danke
Kommt leider auch kein Kreis raus.
Danke Darth, hat sich vielversprechend angehört. Vielleicht mach ich ja was falsch aber bei mir kommt da wieder ne elipse raus. Wenn ich für x= 0 einsetze müßte 0 rauskommen damit ich einen kreis mit dem mittelpunkt bei p=(0/-2) bekomme, aber es kommt p=(0/2)
also ich hab mir gedacht ich zeichne es erstmal auf bevor ich mich an die programmierung wage. Bin ehrlich gesagt auch nich so der top programmierer. Wir programmieren in c++, weißnich vielleicht hilft das ja.
nee, bin ja noch auf dem papier^^ wenn ich aber vielleicht mach ich auch einfach nur was bei der berechnung falsch. Also ich hab x=-4 würde in der formel heißen
Wurzel 4² -(-4)²
x=-3
Wurzel 4² -(-3)²
x=-2
Wurzel 4² -(-2)²
x=-1
Wurzel 4² -(-1)²
Richtig?
Also das mit dieser Polardarstellung versteh ich nicht so ganz. Muß ich dann beim Punkt (-4/0) folgendes eingeben?
x=-4* cos(alpha) + 0*sin(alpha)
y=-4* sin(alpha) + 0*cos(alpha)
gut dann noch ne kurze frage. r*cos ist kein problem. aber was ist denn alpha? also wenn ich das mit dem taschenrechner mache?
jap, jetzt hab ich es :) ich bin jetzt also schon mal in der lage einen kreis rechnerisch zu ermitteln. Danke dafür. Vielleicht noch einen Tipp, wie ich das jetzt am besten in C++ übertrage? Wir arbeiten mit dem Borland Builder. Danke schon mal
4 Antworten
- vor 1 JahrzehntBeste Antwort
Die Formel für einen Kreis um den Mittelpunkt 0 mit Radius R
ist
y = Wurzel aus ( R^2 - x^2)
Die Wurzel ist entscheidend!
In Deinem Fall wäre dann R = 4
y = Wurzel ( 16 - x^2)
Der mathematische Hintergrund ist der Satz des Pythagoras!
Eine Alternative wäre die Verwendung von Polarkoordinaten:
Dazu läßt man den Winkel alpha von 0 nach 360 Grad laufen
und rechnet
x = R * cos( alpha )
y = R * sin( alpha )
Es ist äquivalent zur der Wurzelfunktion von oben!
Ich habe das auch schon so programmiert.
Hoffe, es hilft Dir weiter!
@Fragensteller
Vielleicht sieht es auch nur wie eine Ellipse aus, weil der
Bildschirm die Darstellung verzerrt?
Außerdem habe ich vergessen, zu erwähnen,
daß nur die x - Werte von -R bis +R gültig sind,
also von -4 bis +4
@Hanfblatt
Ja, der Einwand ist berechtigt:
Für den Halbkreis oberhalb von der x - Achse ist die
positive Wurzel zuständig, für den Bereich darunter die negative Wurzel!
Da habe ich echt nicht mehr daran gedacht! Von daher
ist die Polar - Form idealer, wenn auch etwas langsamer.
Macht das heutzutage einen Unterschied? Früher haben
wir immer Look-Up - Tables in den Speicher geschrieben,
wo man schnell nachschauen konnte!
@Flaty
Meine Formeln gelten so nur für den Fall, daß Du einen Kreis um den Ursprung (0|0) haben möchtest!
(-4|0)
x = 4 * cos( 180 ) = -4 (denn cos(180) = -1)
y = 4 * sin ( 180 ) = 4 (denn sin(180) = 0 )
Wenn Du den Kreis um den Mittelpunkt (x0|y0) brauchst,
mußt Du entsprechend verschieben:
y = y0 +- Wurzel ( R^2 - (x-x0)^2) (+- je nach Fall!)
bzw.
x = x0 + R cos ( alpha )
y = y0 + R sin (alpha )
Achtung: Die Sinus - und Cosinus - Funktionen in C++
sind für das Bogenmaß formuliert, d.h. von 0 bis 2 * pi!
Einige weitere Beispiele:
(4|0) x = 4 * cos( 0 ) , y = 4 * sin(0 )
(0|4) y = 4 * cos( 90 ) , y = 4 * sin(90 )
@Hanfblatt
Ich will Dich nicht kritisieren, aber Deine Polardarstellung
sieht eher aus wie eine verunglückte Drehung des Koordinatensystems, bzw. Anwendung einer orthogonalen
Matrix.
@Flaty
Wie es der Borland Builder macht, weiß ich nicht, aber ich würde es so programmieren:
#include <math>
// Weiterer Code hier
double pi = 4.0 * atan(1.0); // Pi berechnen.
int i = 0 , N = 360; // Anzahl der (x|y) - Paare!!!
double delta_alpha = 2 * pi / ( N - 1 );
double alpha = 0.0;
double x = 0.0 , y = 0.0;
for ( i = 0 ; i < N ; i++ )
{
x = R * cos( alpha );
y = R * sin( alpha );
/*
Hier Deine Zeichenoperation einfügen
*/
alpha += delta_alpha // Alpha um Schrittweite erhöhen.
}
Hoffe, ich habe nichts vergessen!
Quelle(n): Programmiererfahrung, Physikstudium - Anonymvor 1 Jahrzehnt
Du kannst das auch über die Polardarstellung machen, je nachdem was dir beliebt. Die Formel von dem User über mir wäre aber die schnellere Variante, falls es dir auf Performance ankommt.
Du musst bei der obigen Formel aber unterscheiden zwischen - Wurzel aus r^2 - x^2 und +Wurzel aus r^2 - x^2.
//Ich seh gerade was du meinst, dann geh doch den Weg über Polarkoordinaten und der Verschiebung des Punktes über
x=x'*cos (alpha) + y'*sin(alpha) und
y=x'*sin (alpha) + y'*cos(alpha)
//Hmm, heutzutage spielt das eigentlich keine Rolle. Bei 2 GhZ-Rechnern geht das in Millisekunden, im Gegensatz zu einem alten PC mit 133 Mhz.
//Deine Berechungen sind schon richtig.
Ich habs selbst schon lang nicht mehr mit den Polarkoordinaten gemacht, deswegen will ich in Bezug auf die Transformation auch nichts falsches niederschreiben. Ich muss selbst erstmal prüfen und sehen.
Mach erstmal was Darth gegeben hat, das mit r*cos alpha für x und r*cos alpha für y. Das obrige sollte zwar auch gehen, aber lieber nicht ganz so kompliziert denken.
Alpha ist der Winkel, den du im Kreis durchläufst, sprich 0° bis 360°.
Im Koordinatensystem:
I: 0°-90°
II:90°-180°
III:180°-270°
IV:270°-360°.
//Jo, ich hab damit aber früher irgendwie Geraden gedreht bzw drehen lassen. Passt aber nicht so ganz, wie ich mal durch einen Testlauf gesehen hab, da sonst bei 90° ein Punkt von (0/4) entstehen müsste, tut es aber nicht, es ist darunter.