Entwickler-Ecke
Sonstiges (Delphi) - Winkelberechnung vom Dreieck
masterchris_99 - So 21.03.04 19:28
Titel: Winkelberechnung vom Dreieck
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
http://mitglied.lycos.de/derquakecommander/03.17.04_eigene_Unit.rar
Moderiert von
Peter Lustig: Code- durch Delphi-Tags ersetzt
ähM_Key - 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
masterchris_99 - So 21.03.04 20:01
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
ähM_Key - So 21.03.04 20:47
Na wunderbar! :D
Super Idee die Funktion einzubauen!
Grüße; ähM_Key
Christian S. - 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
masterchris_99 - 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 :D
Also ich denke mal die berechnung haut net hin.
ähM_Key - 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 :oops:)
Wenn ersteres der Fall ist solltest du auch vo dieser den Quelltext posten!
Grüße; ähM_Key
masterchris_99 - 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. - So 21.03.04 23:54
Wie heißt der Fehler denn? Die Exception hat doch einen Namen!
raziel - 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"!
Segelflieger - 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.
masterchris_99 - 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. - 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
Segelflieger - Mo 22.03.04 20:20
ist winkel wa auch der, der seite a gegenübeliegt?
Christian S. - Mo 22.03.04 20:20
ja
raziel - 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
raziel - Mo 22.03.04 20:22
da war ich wohl zu langsam...
masterchris_99 - Mo 22.03.04 21:24
Wieder Fehler vom Anfang
Invalid floating point operation
raziel - 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
adrian4321 - Sa 27.03.04 20:26
Bei dem Thema muss ich noch eins draufsetzen: Das Prog wofür ich in der 9. in Mathe eine 1 bekommen hab....
Leider hab ich den Quellcode nicht mehr bzw. ich hab ihn 128Bit verschlüsselt und den Schlüssel verloren (na ja, dumme Sache.... :autsch:) echt zum :puke:
sondern nur die exe von einer CD aber ich kann Euch jedoch garantieren dass sie keine Würmer etc. enthält (wenn doch bekommt Ihr alle .... moment.... z.B. ein Auto.)
War ein harter Brocken Arbeit!! (kann man da evtl wieder die Sourcen rausbekommen?)
[url]
http://www.hdegwert.de/Umfang21.exe[/url]
freue mich über feedback.
adrian
raziel - So 28.03.04 11:23
an den source direkt rankommen wird wohl nich gehen. afaik gibts keinen delphi-decompiler (ein standard disassembler würde gehen, aber dann hast du asm-code -> bringt nich wirklich viel...)
für die graphiken würde ein normaler resource-hacker genügen (sofern nicht dynamisch erzeugt), die forms aus delphi-applications kriegt man mit nem speziellen tool wieder (dessen name mir grad entfallen ist).
ansonsten würde dir noch ein brute-force angriff auf den verschlüsselten source bleiben. würde je nach algorithmus und PC so zwischen einem und fünf Mrd. Jahren dauern...:roll:
raziel
adrian4321 - So 28.03.04 13:51
Hab mich mal bei Profi Hackern umgehört die meinten die 128Bit RSA Verschlüsselung von W2k ist mit normalen PCs hoffnungslos :wink:
adrian
ähM_Key - So 28.03.04 14:29
Am Ende ist es eigentlich egal, was du für nen Rechner hast!
Ob nun 3GHz oder 3THZ...das macht dann statt 5Mrd. Jahre nur noch 5Millonen! :D
Das ist woh neu schreiben das beste...ein ganzes OS ist es ja nicht ;-)
Grüße; ähM_Key
raziel - So 28.03.04 14:47
da hab ich wohl die ironie tags vergessen... :roll:
ähM_Key hat folgendes geschrieben: |
Das ist woh neu schreiben das beste...ein ganzes OS ist es ja nicht |
soll das ein wink mit diesem berüchtigten zaunpfahl sein?
Win2k hat ne 128-bit RSA Verschlüsselung?? imho is RSA erst im Bereich 1024, 2048 und 4096 Bit sicher...
raziel
ähM_Key - So 28.03.04 15:02
raziel hat folgendes geschrieben: |
soll das ein wink mit diesem berüchtigten zaunpfahl sein?
|
Kenne den Spruch jetzt nicht, aber es sollte auf keinen Fall ein perönlicher Angriff sein ;)
Grüße; ähM_Key
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!