PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Winkelberechnung



kalletronic
07.04.2008, 19:58
Hi Leute,

ich hab mir mal folgenden code für den cosinussatz zusammengebastelt, aber nun steck ich fest, wie kann ich mir vom ergebniss das zuletzt in "winkel" steht ( ca. 0,7999) den daraus resultierenden Winkel von 36,88° berechnen


Dim A As Single
Dim B As Single
Dim C As Single
Dim A2 As Single
Dim B2 As Single
Dim C2 As Single
Dim Winkel As Single

Config Portc.0 = Output

A = 63.25
B = 100
C = 100
Do
B2 = B * B
A2 = A * A
C2 = C * C
Winkel = B2 + C2
Winkel = Winkel - a2
Winkel = Winkel / 2
Winkel = Winkel / B
Winkel = Winkel / C
Winkel = Cos(winkel)

Loop

Willa
07.04.2008, 20:28
Hi!
Meiner Meinung nach musst du erst die Terme über und unter dem Bruchstrich ausrechnen und die erst dann dividieren. Ein Bruchstrich ist ja gleichbedeutend mit einer Klammer für Zähler und Nenner.
Dann musst du wahrscheinlich acos statt cos nehmen, und vorher den Winkel in Rad umrechnen (180/PI).
Aber alles nur geraten....
Viele Grüße,
William

Christopher1
07.04.2008, 20:32
Hi,


Dim A As Single
Dim B As Single
Dim C As Single
Dim A2 As Single
Dim B2 As Single
Dim C2 As Single
Dim Winkel As Single

Config Portc.0 = Output

A = 63.25
B = 100
C = 100

Do
B2 = B * B
A2 = A * A
C2 = C * C
Winkel = B2 + C2
Winkel = Winkel - A2
Winkel = Winkel / 2
Winkel = Winkel / B
Winkel = Winkel / C
Winkel = ACOS(winkel) ' danach müsstest du den Winkel im Bogenmaß haben
Winkel = Winkel * 180
Winkel = Winkel / PI
Loop

Es gibt aber sicher auch eine einfachere Variante, so müsstest du halt Pi annähernd in eine Konstante packen, dann ist es aber natürlich nichtmehr genau ;-)
/EDIT Nö warum soll er erst Zähler und Nenner ausrechnen, es reicht doch wenn er den Zähler ausrechnet und dann einzeln dividiert.
Statt COS muss ACOS hin und statt B2 = B * B könnte man auch
B2 = SQR(B) schreiben.

kalletronic
08.04.2008, 08:54
Danke für die Antworten, ich werds dann mal probieren, ich habs grad mal so durchgerechnet und das scheint zu funktionieren, das ganze soll mal ne Positionsbestimmung mit 4 Bake werden, mal schauen wies funzt :-)

jeffrey
08.04.2008, 10:37
hi,
sind A,B und C auch winkel? wenn ja, müssen diese auch zuerst in rad umgerechnet werden.
mfg jeffrey

kalletronic
08.04.2008, 11:56
hi, nein, A,B und C sind die Seiten des ausgemessenen Dreiecks

jeffrey
08.04.2008, 12:46
hi,
wie soll denn die positionsbestimmung funktionieren? du hast doch dann 4 winkel zwischen den baken. und nen bekannten abstand und winkel zwischen den baken. daraus kannst du dann die länegn berechnen. aber dann müsste deine ganze berechnung dach andersrum funktionieren, also den winkel die länge berechnen, oder?
mfg jeffrey

kalletronic
08.04.2008, 13:30
hi, ich hab mir das so gedacht: ich habe ein Quadrat mit zb. 100x100, in jeder ecke steht ein Bake. Der Bot misst sich alle paar sekunden den Abstand zu jedem Bake, dann hat man 4 bekannte diagonalen, die Länge der jeweiligen Seiten des Quadrates kennt der Bot und so müsste es doch möglich sein mit hilfe vom Cosinussatz zimlich genau die Position als X und Y Koordinate zu berechnen. Falls ich mir da was falsch überlegt habe bitte koregiert mich

jeffrey
08.04.2008, 13:46
hi,
wie willst du denn den abstand zur bake messen? und kann der bot die einzelenen baken voneinander unterscheiden? da brauchst dann aber eigntlich nur 2 baken, sofern sie in den ecken stehen
mfg jeffrey

kalletronic
08.04.2008, 13:59
hi, ich dachte mir mal so auf die schnelle, daß es mit Ultraschall schon irgendwie gehen müßte sich den abstand zu dem Bake auszumessen. Wenn der Bot zB. ein Signal ausschickt mit dem die messung gestartet wird, und die Bake 1 einen Impuls, Bake 2 2 Impulse usw. zurücksendet dann weiß der Bot doch welche Bake geantwortet hat und anhand der vergangenen Zeit zwischen den Impulsen müßte man sich doch dann die Entfernung ausrechnen können. Nach meiner Überlegung brauch ich mindestens 3 Baken wenn mich nich alles täuscht, denn so wie ich X und Y berechne brauch ich dazu die seiten von 2 Dreiecken...

jeffrey
08.04.2008, 14:11
hallo,
ja könnte so schon klappen, musst halt wissen, welche verzögeruneng durch die signalverarbeitung in der bake entstehen.
kommt auf die anordnung deiner baken an, wieviele du brauchst, wenn die baken in den ecken des quadrats stehen und du nur innerhalb des quadrats sein kannst, dann reichen 2, sons benötigst du für eine eindeutige bestimmung mindestens 3.
mfg jeffrye

kalletronic
08.04.2008, 14:18
ich habs mal grad so durchgerechnet, die geschwindigkeit von US in Luft is laut so ner Internetseite 331m/s , das wären dann bei einer entfernung von ca 10m 0,031sec kann das stimmen????

jeffrey
08.04.2008, 14:31
ich habs mal grad so durchgerechnet, die geschwindigkeit von US in Luft is laut so ner Internetseite 331m/s , das wären dann bei einer entfernung von ca 10m 0,031sec kann das stimmen????
so ungefähr, 0,030s aber du musst die stecke mal 2rechnen, weil es den hin und rückweg gibt, also dann 0,06s.

kalletronic
08.04.2008, 14:42
achso, ich habs mir fast gedacht, mal ne andere frage, is das überhaupt ne sinnvolle lösung, oder gehts auch einfacher?

Christopher1
12.04.2008, 10:00
Hi,
ich bin heute aus Zufall über den Befehl RAD2DEG gestoßen:
http://avrhelp.mcselec.com/rad2deg.htm
Damit lässt sich das sicher besser ausrechnen ;-)

kalletronic
14.04.2008, 19:58
Hi, danke für eure hilfe, ich hab grad nochmal die variante von Christopher1 probiert.
Fazit: Christophers Variante braucht weniger Speicher und eine Zeile Code weniger.
Zur sicherheit hab ich die genauen Werte mit mehreren Rechnern nachgerechnet.
Der exakte Winkel beträgt 36.8725833015856°
berechnet mit der ersten Metode :36.87234°
berechnet mit Christophers Metode: 36.87233°
Die geringe Abweichung wird warscheinlich in der berechnung die ich zuvor mache liegen, obwohl die abweichungen dort erst in der 5. oder 6. Stelle nach dem Komma liegen, aber für meine zwecke wirds wohl genau genug sein.

Mfg Kalle