Autor |
Beitrag |
masterchris_99
      
Beiträge: 28
|
Verfasst: So 21.03.04 19:28
Moin Moin
Also ich habe einpaar Probleme mit der Aufgabe.
Also zur AUfgabe ich soll bei gegebener Seite a, b und c die Winkel ausrechnen nur kommt nie das richtige oder annähernd das richtige raus.
Hier mal die Procedure
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure winkel (a,b,c:real; var wa,wb,wg:real); begin wa:=cos(((b*b)+(c*c)-(a*a))/(2*(b+c))); wb:=cos(((a*a)+(c*c)-(b*b))/(2*(a+c))); wg:=cos(((a*a)+(b*b)-(c*c))/(2*(a+b))); end; |
Und hier der Link zum kompletten Programm
mitglied.lycos.de/de...7.04_eigene_Unit.rar
Moderiert von Peter Lustig: Code- durch Delphi-Tags ersetzt
|
|
ähM_Key
      
Beiträge: 88
Windows XP Professional
D7 Enterprise
|
Verfasst: So 21.03.04 19:53
Das Problem ist sicherlich, dass du die Winkel in Gradmaß angibst!
Delphi rechnet aber mit Bogenmaß!
Also den Gradwert (0-360°) mit (PI/180) multiplizieren und du kommst auf Bogenmaß (0-2Pi)!
Grüße; ähM_Key
_________________ Alles geht ni! Aber ein bissl' was muss!
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: So 21.03.04 20:01
|
|
ähM_Key
      
Beiträge: 88
Windows XP Professional
D7 Enterprise
|
Verfasst: So 21.03.04 20:47
Na wunderbar!
Super Idee die Funktion einzubauen!
Grüße; ähM_Key
_________________ Alles geht ni! Aber ein bissl' was muss!
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: So 21.03.04 21:18
ähm das programm verursacht aber leider noch Fehler kann sich das vielleicht mal einer angucken
mitglied.lycos.de/de...7.04_eigene_Unit.rar
hab mal die veränderte version hochgeschoben.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 21.03.04 21:51
Hallo!
(1) Bitte poste den Codeteil, der den Fehler produziert. Ich denke nicht, dass sich jeder erst die Datei herunterladen will.
(2) Du solltest uns auch verraten, was das für ein Fehler ist.
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: So 21.03.04 21:56
masterchris_99 hat folgendes geschrieben: | Programm läuft jetzt mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure winkel (a,b,c:real; var wa,wb,wg:real); begin wa:=RadToDeg(arccos(((b*b)+(c*c)-(a*a))/(2*(b+c)))); wb:=RadToDeg(arccos(((a*a)+(c*c)-(b*b))/(2*(a+c)))); wg:=RadToDeg(arccos(((a*a)+(b*b)-(c*c))/(2*(a+b)))); end; |
Moderiert von Peter Lustig: Code- durch Delphi-Tags ersetzt |
Verursacht bei der Winkelberechnung einen Fehler
Wenn ich wüsste wieso würde ich den Fehler schon besser beschreiben und beheben Sorry
Also ich denke mal die berechnung haut net hin.
|
|
ähM_Key
      
Beiträge: 88
Windows XP Professional
D7 Enterprise
|
Verfasst: So 21.03.04 23:01
Zitat: | Verursacht bei der Winkelberechnung einen Fehler |
Was denn für einen? Nur falsche Werte?
Hast du die RadToDeg sebst geschrieben, oder ist die in ner Unit implementiert? (kenn mich da ni so aus  )
Wenn ersteres der Fall ist solltest du auch vo dieser den Quelltext posten!
Grüße; ähM_Key
_________________ Alles geht ni! Aber ein bissl' was muss!
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: So 21.03.04 23:17
Also das is in "Math" mitdrin
Hab den Fehler jetzt einbisschen eingegrenzt
Wenn ich nur
wa:=RadToDeg(cos(((b*b)+(c*c)-(a*a))/(2*(b+c))));
schreibe kommt kein fehler aber sind auch die falschen Werte
aber sobald ich wieder
wa:=RadToDeg(arccos(((b*b)+(c*c)-(a*a))/(2*(b+c))));
schreibe verursacht er einen Fehler
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 21.03.04 23:54
Wie heißt der Fehler denn? Die Exception hat doch einen Namen!
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mo 22.03.04 17:34
ich könnt mir denken worans liegt. gib mal über
Delphi-Quelltext 1:
| showmessage(FloatToStr(((b*b)+(c*c)-(a*a))/(2*(b+c)))); |
den wert aus, der an die Funktion ArcCos übergeben werden soll. Wenn der Wert größer als 1 oder kleiner als -1 is, geht des net, weil (wenn ich mich nach fast einem Jahr Mathe-Abstinenz recht erinnere) der Definitionsbereich von ArcCos -1 <= x <= 1 is. Abs(x) muss also <= 1 sein!
raziel
// EDIT: source-fehler ausgebessert...
btw: nimm statt "real" lieber "single", "double" oder "extended"!
_________________ JSXGraph
|
|
Segelflieger
      
Beiträge: 124
WinXP Pro
D7 Prof
|
Verfasst: Mo 22.03.04 18:59
Hallo!
Also, ohne es jetzt ausprobiert zu haben, denke ich dass der fehler in deiner Formel steckt. Das soll doch der Cosinussatz sein, oder? Dann müsste es (glaub ich) eigentlich so aussehen:
Quelltext 1: 2: 3:
| wa := RadToDeg(ArcCos((a*a - b*b - c*c)/(2*b*c)); wb := RadToDeg(ArcCos((b*b - a*a - c*c)/(2*a*c)); wg := RadToDeg(ArcCos((c*c - a*a - b*b)/(2*a*b)); |
Ich denke, damit sollte es funktionieren. Probiers mal aus.
_________________ Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: Mo 22.03.04 20:06
Segelflieger hat folgendes geschrieben: | Hallo!
Also, ohne es jetzt ausprobiert zu haben, denke ich dass der fehler in deiner Formel steckt. Das soll doch der Cosinussatz sein, oder? Dann müsste es (glaub ich) eigentlich so aussehen:
Quelltext 1: 2: 3:
| wa := RadToDeg(ArcCos((a*a - b*b - c*c)/(2*b*c)); wb := RadToDeg(ArcCos((b*b - a*a - c*c)/(2*a*c)); wg := RadToDeg(ArcCos((c*c - a*a - b*b)/(2*a*b)); |
Ich denke, damit sollte es funktionieren. Probiers mal aus. |
Also du hast nur eine Klammer vergessen.
wa := RadToDeg(ArcCos((a*a - b*b - c*c)/(2*b*c)));
wb := RadToDeg(ArcCos((b*b - a*a - c*c)/(2*a*c)));
wg := RadToDeg(ArcCos((c*c - a*a - b*b)/(2*a*b)));
so geht das schon nur kommen nich die richtigen Winkel raus.
hab mal meinen alten Mathe Hefter rausgesucht und die werte stimmen nich mit denen aus den erfolgreichen tests überein
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 22.03.04 20:17
Hallo!
IMHO habt Ihr da einen Vorzeichenfehler drin. In meiner Formelsammlung steht:
a² = b² + c² - 2bc * cos(alpha)
MfG
Peter
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Segelflieger
      
Beiträge: 124
WinXP Pro
D7 Prof
|
Verfasst: Mo 22.03.04 20:20
ist winkel wa auch der, der seite a gegenübeliegt?
_________________ Früher hatten die Menschen Angst vor der Zukunft. Heute muss die Zukunft Angst vor den Menschen haben.
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mo 22.03.04 20:20
ja
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mo 22.03.04 20:21
ich komm zwar grad von ner mathenachhilfe mit gleichem thema aber na gut:
wir gehen davon aus: c² = a²+b²-2ab*cos(wc)
=> 2ab*cos(wc) = a²+b²-c²
=> cos(wc) = (a²+b²-c²)/2ab
=> wc = arccos((a²+b²-c²)/2ab)
> Die ursprüngliche Formel war _fast_ korrekt, nur am ende isn produkt und keine summe!
die formel lautet also für wc korrekt:
Delphi-Quelltext 1:
| wc := RadToDeg(ArcCos((a*a+b*b-c*c)/2*a*b)); |
analog wa und wb
raziel
_________________ JSXGraph
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Mo 22.03.04 20:22
da war ich wohl zu langsam...
_________________ JSXGraph
|
|
masterchris_99 
      
Beiträge: 28
|
Verfasst: Mo 22.03.04 21:24
Wieder Fehler vom Anfang
Invalid floating point operation
|
|
raziel
      
Beiträge: 2453
Arch Linux
JS (WebStorm), C#, C++/CLI, C++ (VS2013)
|
Verfasst: Di 23.03.04 17:54
Titel: w.delphi
dann prüf doch mal bitte den wert, den du an ArcCos übergibst (siehe oben!)
wie bereits gesagt darf der nur zwischen -1 und 1 sein!
Falls Abs(x) > 1 ist, dann ist das wahrscheinlich kein Dreieck!
(Man kann ja nich einfach "beliebige" Werte eingeben, sie müssen schon ein paar wenigen Regeln folgen)
raziel
_________________ JSXGraph
|
|