Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Rad in Deg umformen, aber wie???


Dodekaeder - Sa 28.01.06 13:17
Titel: Rad in Deg umformen, aber wie???
Hallo!

Ich habe ein kleines (simples) Programm geschrieben zur Berechnung der Geschwindigkeit eines Pistolengeschosses.

Und bei einer Formel brauche ich die Sinusfunktion [sin(45)=0.85] , aber Delphi gibt den wert ja nur im Bogenmaß(Rad) an, aber ich brauche ihn in Altgrad(Deg) [sin(45)=0.707].

Weis jemand wie ich den Wert von Rad in Deg umformen kann?


Gausi - Sa 28.01.06 13:24

Hallo und :welcome: in der Entwickler-Ecke.

Obs da ne fertige Funktion gibt, weiss ich nicht. Aber es gilt die Formel

Quelltext
1:
 rad / 2*pi  = deg / 360                    

Daraus kann man sich ne Funktion ganz schnell selbst basteln:

Delphi-Quelltext
1:
2:
3:
4:
function Rad2Deg(Rad: Double): Double;
begin
  result := rad / (2 * PI) * 360;
end;


BenBE - Sa 28.01.06 13:24

So hier:


Delphi-Quelltext
1:
2:
Deg := Rad * 180 / Pi;
Rad := Deg * Pi / 180;


Steht IIRC sogar in der DOH. Die Rihenfolge der Multiplikation und Division spielt kaum eine Raolle; führt man aber jegliche Divisionen NACH Multiplikationen aus, kann man die Rechengenauigkeit erhöhen, da man Rundungsfehler reduziert.

P.S.: Sehr schnelle Implementierungen dieser Funktionen für Extended gibt's unter http://viewcvs.omorphia.de/omorphia/library/source/OMathGeneral.pas


Dodekaeder - Sa 28.01.06 13:37
Titel: re:
Hm... naja... ich hab die Formeln ma kurz durchgerechnet mitm Taschenrecher

aber da kommt ja dann der Wert als Grad wieder raus... (z.B. sin(45)=0.8509)
und das in eure Formeln eigesetzt, dann kommt gerundet wieder 45grad raus...)

Ich brauche aber den wert 0.707...

Und wie komme ich nun von 0.8509(Radiant) auf 0.707(altgrad)??? [nicht 45° Grad]


Gausi - Sa 28.01.06 13:45

Also. Wenn 45 als Rad-Wert interpretiert wird, dann ist der Sinus davon ca. 0.85. Der Sinus von 45° (deg) ist 0.7
Da Delphi mit Rad arbeitet, musst du die 45deg in den entsprechenden rad-Wert umwandeln:

Delphi-Quelltext
1:
 nullkommasieben = sin(Deg2Rad(45));                    


Jetstream - Sa 28.01.06 14:40

user profile iconGausi hat folgendes geschrieben:


Delphi-Quelltext
1:
 nullkommasieben = sin(Deg2Rad(45));                    


Das heißt, wenn ich 45 von deg auf rad umwandle, dann davon den sinus nehme, bekomme ich 0.7 ?
Ich bekomm bei mir wieder 0.8509 raus.

@ Dodekaeder:

Ich hab dich so verstanden: Du suchst die Zahl, deren Sinus in Rad gleich 0.707 ist.

Wenn das nicht stimmt, musst du das, was jetzt kommt, gar nicht mehr lesen.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Du suchst x, und für x gilt:

Sinus(x) = 0.707

x = arcsin(0.707)

So, was is jetzt arcsin ? schau mal auf deinen taschenrechner, 
da müsste irgendwo ne sin^-1 taste sein, die isses.

Stell den Rechner auf rad und mach sin^-1(0.707) da kommt dann 0.7854 raus.

Also ist Sinus(0.7854) = 0.707


Oder du willst die Sinusfunktion benutzen, indem du Gradzahlen einträgst.

Da machst du einfach aus sin(x) ein sin(x*pi/180)
und schon denkt delphi du hättest für x ne gradzahl eingegeben.


Tilo - Sa 28.01.06 14:59

@Dodekaeder:
Hast DU beim Taschenrechner auch den richtigen "Zahlenbereich" eingestellt? Es macht einen Unterschied wenn der Taschenrechner im DEG oder RAD Modus ist.
cos(360)=1 im DEG Modus und
cos(2pi)=1 im Reg Modus.


Dodekaeder - Sa 04.02.06 16:41

Reflektion:

Die Funktion die ich habe lautet:
W:=(sqr(v0)*(sin(2*a))/g

Es ist eine Formel zur Berechnung der Wurfweite eines Wurfapparates (ein schräger Wurf).
W = die Wurfweite in [m],
v0 = die Geschwindigkeit des Projektils beim Abwurf in [m/s],
a (stellvertredend für alpha) = der Winkel in dem es abgeschossen wird in [Grad],
g = Erdbeschleungung in [m/s^2].

g = eine Konstante,
v0 und a sind Variablen, die ich in editfelder eintragen möchte.

Und ich möchte dann z.b. gerne für v0=1 m/s und für a=45° eingeben, dann sollte für
W=(1²*sin(2*45))/9,81=(1*sin(90))/9,81=(1*1)/9,81=1/9,81=0,101m rauskommen.

Und wie mache ich das jezt, dass Delphi für sin(2*a) den wert in deg angibt???
Die funktion sin(Deg2Rad(a)) funktioniert nicht....
Müsste das nicht eigentlich auch heißen sin(Gra2Deg(a)) ???

@Tilo
Ja ich kann zwischen DEG, RAD und GRA an meinem TR hin und herschalten...

Moderiert von user profile iconGausi: Beiträge zusammengefasst.


LLCoolDave - Sa 04.02.06 16:54

Nimm statt sin(2*a) einfach sin(a*PI/90)


Gausi - Sa 04.02.06 17:05

Ich fürchte, du verstehst da was falsch...oder ich verstehe dich falsch. Delphi kann den Wert von Sin(x) nicht in Deg, Rad oder sonstwas anzeigen. Der Wert von Sin(x) ist immer eine Zahl zwischen -1 und 1. Das einzige, worauf man achten muss ist, dass das x - also der Winkel - in der richtigen "Einheit" angegeben ist. Dabei ist wichtig, was du bzw. Delphi als "einmal im Kreis" definierst. Im normalen Leben sagt man, dass "360°" einen vollen Kreis ergeben. In der Mathematik ist ein voller Kreis "2*Pi" (ohne "°"). Und beim Militär ist ein voller Kreis "400°" (damit ein rechter Winkel 100° ist - kann man einfacher rechnen *g*).

Delphi interpretiert die Werte für x im Sinus im mathematischen Sinne. D.h. Wenn du Delphi einfach Sin(45) ausrechnen lässt, dann geht Delphi davon aus, dass du dich sieben mal im Kreis gedreht hast, und dann noch ungefähr 1.01 weitergegangen bist (7*2Pi + 1.01 = 45).
Du wolltest aber, dass Delphi davon ausgeht, dass du nur um 45° abgebogen bist. Daher musst du die 45°(deg) in (ca.)0.78(rad) umwandeln. Und das geht mit der Funktion DegToRad, die hier bestimmt schon gepostet wurde...