Autor Beitrag
madmax4g
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.05.10 14:02 
Guten Mittag (=

schon seit längerer Zeit lese ich in diesem Forum immer fleißig mit. Nun habe ich mich endlich einmal angemeldet, um auch mal um Hilfe fragen zu können, oder anderen Hilfe zu geben. ;)



Nun zu meinem Problem..

Ich schreibe zur Zeit an einem etwas komplexeren Programm. Es soll ein Flugnavigator werden, welcher aus dem eingegebenem Kurs, der Gewünschten Reisefluggeschwindigkeit, und der Windrichtung, und -stärke, der nachzusteurernden Kurs, und die Daraus resultierende Geschwindigkeit berechnen soll.

Außerdem soll er den Flug noch in Form einer Tabelle, oder ähnlichem, simulieren.. Aber das ist zur Zeit nicht das Problem.

Um den Kurs, welchen ich nachsteuern muss auszurechnen brauche ich folgende Formel:

alpha= arcsin( (Windgeschwindigkeit/Eigengeschwindigkeit) * sin(Windrichtung+Steuerkurs) )


mein erstes Problem ist: Delphi rechnet ja bekanntlich im Bogenmaß (RAD) und nicht im Gradmaß (DEG) was hierfür von Nöten währe. Wie realisiere ich das am besten?

mein erster Gedanke war, das ich nach der eigendlichen Rechnung umwandle: steuerkurs:=steuerkurs/180 * PI; . Funktioniert das so?

mein 2. Problem währe folgendes: (quelltext zu Veranschaulichung ;) )

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var sK, gV, wV, wR, lv: extended;

begin
 sk:=STRTOFloat(ekurs.text);   //Werte holen
 gv:=STRTOFLOAT(eReiseV.text);
 wr:=STRTOFloat(eWindR.text);

 wv:=STRTOFLOAT(eWindV.text);


 lv:=ArcSin((wR/gV)*sin(wR-sK)); //berechne

 lv:=lv/180 * PI; //umwandlung in DEG
 
 eKursAnderung.Text:=FLOATTOSTR(lv);//ausgabe


wr=windrichtung
sk=steuerkurs
wV=windgeschwindigkeit
gV=EIgengeschwindigkeit
lv=luvwinkel

Leider stört sich das Program am an dem ARCSIN..(undeklarierter Bezeichner) Habe ich mich da beim Datentyp geirrt? oder woran liegt das?

ich hoffe ihr könnt mir helfen (=

Mit freundlichen Grüßen

Max (:

PS: ich benutze Delphi 2010 (2 Wochen-Testversion) oder alternativ Delphi 2005

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 30.05.10 14:55 
Hallo und :welcome: im Delphi-Forum!

Du könntest für dein erstes Problem die Funktion DegToRad und RadToDeg verwenden, dann brauchst du den Winkel nicht mehr selbst umwandeln.

ArcSin sollte der Compiler eigentlich kennen, probier mal entweder Math oben bei uses dazuzuschreiben oder Math.ArcSin zu schreiben.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
madmax4g Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.05.10 17:41 
vielen Danke für die schnelle ANtwort (=

ich musste math noch bei uses hinzufügen ;) währe ich nicht von allein draufgekommen.. vielen dank (=

jetzt läuft das Program soweit.

Allerdings gibt es einen weiteren Fehler... =/
wenn ich überall gleiche Werte einsetzte kommt es zu einem Fehler. >>Ungültiger Gleitkommaoperator
dieser Fehler tritt in folgernder Zeile auf:

ausblenden Delphi-Quelltext
1:
eV:=wV*((sin(Wr-Sk-LV))/(sin(lv)));					


das entspricht mathematisch x=a*(sin(b-c-d)/sin(d))
müsste also kein Problem sein..

wieso tritt dieser Fehler denoch auf? O.o

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

mein quelltext sieht zur Zeit so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.bberechnenClick(Sender: TObject);

var sK, gV, wV, wr, lv, eV: extended;

{ wr=windrichtung
  sk=steuerkurs
  wV=windgeschwindigkeit
  gV=EIgengeschwindigkeit
  lv=luvwinkel}


begin
  sk:=STRTOFloat(ekurs.text);                  //Wert auslesen
  gv:=STRTOFLOAT(eReiseV.text);                //Wert auslesen
  wr:=STRTOFloat(eWindR.text);                 //Wert auslesen
  wv:=STRTOFLOAT(eWindV.text);                 //Wert auslesen

  lv:=arcsin((wR/gV)*(sin(wR-sK)));            //Berechnung Luvwinkel
  lv:=180/PI*lv;                               //Umwandlung in DEG

  eV:=wV*((sin(Wr-Sk-LV))/(sin(lv)));          //Berechnung Geschwindigkeit
  eV:=180/PI*eV;                               //Umwandlung in DEG

 eKursAnderung.Text:=FLOATTOSTR(lv);           //Ausgabe
 eGeschwindigkeitRes.Text:=FLOATTOSTR(eV);     //Ausgabe
end;


nur falls wer fragt ;)

MfG

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 30.05.10 18:07 
ersten, bitte verwende die [delphi][/delphi]-Tags für deinen Quelltext, dann kann man ihn besser lesen.

zweitens, bitte immer die genaue Fehlermeldung schreiben, möglichst mit angabe in welcher Zeile dieser Fehler auftritt.

user profile iconmadmax4g hat folgendes geschrieben Zum zitierten Posting springen:
das entspricht mathematisch x=a*(sin(b-c-d)/sin(d))


drittens, wenn du d = 0 setzt ist es sin(0), was wiederum 0 entspricht. Eine Division durch null ist aber böse und erzeugt schwarze löcher. ;)

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
madmax4g Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.05.10 18:18 
Zitat:
ersten, bitte verwende die -Tags für deinen Quelltext, dann kann man ihn besser lesen.

zweitens, bitte immer die genaue Fehlermeldung schreiben, möglichst mit angabe in welcher Zeile dieser Fehler auftritt


okay.. werde ich beherzigen


Zitat:
drittens, wenn du d = 0 setzt ist es sin(0), was wiederum 0 entspricht. Eine Division durch null ist aber böse und erzeugt schwarze löcher. ;)


das mit Null ist klar.. aber es tritt ja auch bei 1, 20, oder 732 auf^^

und da ist definitiv keine division durch null ;)

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var sK, gV, wV, wr, lv, eV: extended;

begin

  sk:=STRTOFloat(ekurs.text);                  //Wert auslesen
  gv:=STRTOFLOAT(eReiseV.text);                //Wert auslesen
  wr:=STRTOFloat(eWindR.text);                 //Wert auslesen
  wv:=STRTOFLOAT(eWindV.text);                 //Wert auslesen

  lv:=arcsin((wV/gV)*(sin(wR-sK)));            //Berechnung Luvwinkel
  eV:=wV*((sin(Wr-Sk-LV))/(sin(lv)));          //Berechnung Geschwindigkeit

  lv:=180/PI*lv;                               //Umwandlung in DEG
  eV:=180/PI*eV;                               //Umwandlung in DEG

 eKursAnderung.Text:=FLOATTOSTR(lv);           //Ausgabe
 eGeschwindigkeitRes.Text:=FLOATTOSTR(eV);     //Ausgabe
end


in Zeile 12 tritt der Fehler auf..

und der FEhler lautet, iwe schon gesagt: "Ungültiger Gleitkommaoperator"


Zuletzt bearbeitet von madmax4g am So 30.05.10 19:12, insgesamt 1-mal bearbeitet
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 30.05.10 18:32 
Kann es sein das dieser Term (wR/gV)*(sin(wR-sK)) manchmal größer als 1 bzw kleiner als -1 ist? Wenn ArcSin verträgt nur werte zwischen -1 und 1.

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
madmax4g Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 30.05.10 18:53 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Kann es sein das dieser Term (wR/gV)*(sin(wR-sK)) manchmal größer als 1 bzw kleiner als -1 ist? Wenn ArcSin verträgt nur werte zwischen -1 und 1.


ja das ist ist möglich. Jedoch gibt es für diese Problematik keine andere Formel.. aber vielen Danke für den Hinweis

desweiteren habe ich mich in der Formel auch vertippt.. es muss (wV/gV) heißen.. was aber nichts an der tatsache ändert das es für einige Zhalen nicht geht. >_>

allerding ist es sehr selten das die Windgeschwindigkeit > Fluggeschwindigkeit ist..

muss ich in der Read Me darauf hinweisen


Das Problem was ich habe ist: die Formel und alles stimmt ja.. bloß mit dem Grad-Bodenmaß kommt Blödsinn raus..(dh im bogenmaß gerechnet, und hinterher umgewandelt <> im gradmaß gerechnet) Gibts da nicht iwas damit man den SINUS im Gradmaß rechnet? sowas wie DegSin? das Habe ich mal iwo gelesen, leider funktioniert es nicht. Gibts da nochsowas schlaues was man bei uses hineinschreiben kann?
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: So 30.05.10 23:29 
user profile iconmadmax4g hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem was ich habe ist: die Formel und alles stimmt ja.. bloß mit dem Grad-Bodenmaß kommt Blödsinn raus..(dh im bogenmaß gerechnet, und hinterher umgewandelt <> im gradmaß gerechnet)

Dürfte eigentlich nicht sein. Hast du auch wirklich bei ALLEN Sachen die Umwandlung gemacht?
Also bei jedem Sinus und bei jedem arcus Sinus?

Zur Not kannst du die die ja selber schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function DegSin(i: Real): Real; 
begin 
  Result := Sin(DegToRad(i)); 
end;

function DegArcSin(i: Real): Real; 
begin 
  Result := RadToDeg(ArcSin(i)); 
end;

Siehe auch hier: www.delphipraxis.net...amp;highlight=degsin


user profile iconmadmax4g hat folgendes geschrieben Zum zitierten Posting springen:
Gibts da nicht iwas damit man den SINUS im Gradmaß rechnet? sowas wie DegSin? das Habe ich mal iwo gelesen, leider funktioniert es nicht. Gibts da nochsowas schlaues was man bei uses hineinschreiben kann?

Man könnte natürlich auch alle Winkel intern im Bogenmaß vorhalten und nur für die Ein-/Ausgabe umwandeln ;)
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: So 30.05.10 23:47 
Kann es sein, daß Du einen Tippfehler gemacht hast? In lv:=ArcSin((wR/gV)*sin(wR-sK)) ist der Quotient (wR/gV) nicht dimensionslos. Mit Deinen Angaben würde ich auf Grund einer Dimensionsbetrachtung den Quotienten (wV/gV) (oder den Kehrwert) erwarten, dieser ist als Verhältnis zweier Geschwindingkeiten eine reine Zahl.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 31.05.10 09:01 
user profile iconmadmax4g hat folgendes geschrieben Zum zitierten Posting springen:
desweiteren habe ich mich in der Formel auch vertippt.. es muss (wV/gV) heißen.. was aber nichts an der tatsache ändert das es für einige Zhalen nicht geht. >_>


user profile iconGammatester hat folgendes geschrieben Zum zitierten Posting springen:
Mit Deinen Angaben würde ich auf Grund einer Dimensionsbetrachtung den Quotienten (wV/gV) (oder den Kehrwert) erwarten


Schon ausgebessert worden ;)


user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ArcSin verträgt nur werte zwischen -1 und 1.

Ich denke mal das ist das Problem.

user profile iconmadmax4g hat folgendes geschrieben Zum zitierten Posting springen:
ja das ist ist möglich. Jedoch gibt es für diese Problematik keine andere Formel..

Und das ist definitv keine Lösung ;)

Ich würde sagen du musst das Argument erst so umwandeln, dass es zwischen 1 und -1 liegt. D.h. du musst immer den Winkel <=90 Grad nehmen wenn ich mich nicht irre. 2 Geraden schneiden sich ja immer mit 2 Winkel, einen großen und einen kleinen (in der Summe 180 Grad). Und du musst immer den kleinen nehmen.

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 31.05.10 10:34 
Andererseits kann es ja durchaus sein, dass es keine Lösung gibt: Ich will 3km nach Norden fliegen. Es weht ein Wind von Norden, mit 20 m/s - mein Flugzeug kann aber höchstens 15 m/s Sekunde fliegen. In welche Richtung muss ich fliegen und wann komme ich an meinem Ziel an? :mrgreen:
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 31.05.10 10:45 
Nach süden. aber das halt dafür etwas länger. :rofl:

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.