Archiv verlassen und diese Seite im Standarddesign anzeigen : Werte in einem Halbkreis anordnen!?
BASTIUniversal
15.07.2006, 12:39
Hallo!
Ich bin gerade dabei einen GP2D12 auf nen Schrittmotor zu bauen. Beim Testprogramm für meinen PC stehe ich aber gerade vor einem Problem.
Ich empfange 100 Werte die vom GP2D12 stammen (also Entfernungen) und möchte diese in einem Halbkreis auf meinem Monitor anzeigen lassen, weiß aber nicht wie ich da die Koordinaten des zu setzenden Pixels ausrechnen soll.
Zur Zeit erhöhe ich die X-Koordinate immer um eins, wenn ein neuer Wert kommt. Der Wert selber (kann 0-255 sein) wird auf die Y-Achse aufgetragen. Das Ergebnis zeigt das Bild "Linie" unten im Anhang.
Wie ich mir das ganze Vorstelle zeigt das Bild "Halbkreis". In diesem Halbkreis sollen nachher die Werte angeordnet sein. Je weiter ein Objekt vom Sensor entfernt ist, desto weiter aussen sollen die Punkte gezeichnet werden.
Da ein Schritt meines Motors 3,6° beträgt sollten die Werte auch immer um 3,6° "verschoben" sein.
Um ein Pixel zu setzten brauch ich die X und Y Koordinaten, der Mittelpunkt des Kreises im Bild ist X = 150, Y = 150 (Pixel versteht sich). Wäre schön wenn mir da jemand ne Beispielrechnung machen könnte!
Bitte um Hilfe!
Hallo,
also vom Prinzip her ist es relativ einfach.
1. Die gegebenen Werte:
- Winkel Alpha (Schrittmotorstellung)
- Entfernung (wird vom Sensor geliefert)
Den Winkel Alpha müsstest du in dem Fall so angeben, das die Y Achse 0° darstellen. Also mit einem Wertebereich vom -90° ... 0° ... 90° arbeiten.
2. Lösungsansatz:
Da jeder Punkt aus diesem Polaren Koordinaten in Karthesische umgewandelt werden muss ergeben sich folgende weiteren Werte:
- alle weiteren Winkel (90° & 180° - 90° - Alpha)
Wenn ich mich nun recht entsinne kann man das ganze nun mittels einer Verhältnissgleichung auflösen.
Entfernung / 90° = Y / (90° - Alpha)
Y = Entfernung * (90° - Alpha) / 90°
Damit hast du 2 Strecken eines rechtwinkligen Dreieckes und kannst die 3. z.B. nach dem Pytagoras errechnen ...
So, nun haffe ich mal das ich nicht einen kompletten Knoten im Hirn hatte :D
Grüße,
da HAnni.
Hallo,
probiers mal mit:
X = cos(Winkel) * Messwert * 150 / 255
Y = sin(Winkel) * Messwert * 150 / 255
Der Winkel muss evtl. umgerechnet werden, je nachdem
ob die Winkelfunktionen (sin,cos) in Grad oder Rad arbeiten.
Häufig ist der Vollkreis nicht 360 Grad sondern 2pi.
Dann ist die Umrechnung: Winkel = Winkel * Pi / 180
Gruß Jan
BASTIUniversal
15.07.2006, 14:27
Hallo,
also vom Prinzip her ist es relativ einfach.
Naja...mal davon abgesehen das ich das auch in 100 Jahren noch nicht verstanden hab...! ](*,)
Ich werde mal die Gleichungen von JanB ausprobieren...!
Danke schonmal!
PS: Was heißt Rad bzw. Grad? Da gab's an meinem Taschenrechner ne Taste an der man das verstellen konnte...hab aber nie gewusst wozu die gut war O:)
Hallo,
wir sind normalerweise gewohnt in Grad (DEG) zu rechnen.
Dann ist ein Vollkreis eben genau 360 Grad und ein
rechter Winkel 90 Grad.
In vielen Progammiersprachen wird aber in RAD gerechnet.
Dann ist ein Vollkreis nicht 360 Grad sondern 2*pi also 6,2832
Ein rechter Winkel ist dann pi/2 also 1,5708.
Wenn du in deiner Programmiersprache nicht zwischen Grad (DEG)
und RAD umschalten kannst, muss du eben umrechnen.
360 Grad = 2pi = 6,2838
1 Grad = 2*pi/360 = 0,0174523
Probier einfach mal aus was sin(30) ergibt.
Wenn es 0,5 ergibt dann wird in Grad (DEG) gerechnet.
Wenn es -0,988 ergibt, dann ist es RAD und du musst umrechnen:
30 Grad * 0.0174523 = 0,52357
sin(0,52357) ergibt dann die gewünschten 0,5.
Ich denke das war ausführlich...
Gruß Jan
BASTIUniversal
15.07.2006, 17:02
Danke für die Erklärung!
Ich hab's getestet...das Programm rechnet mit dem "Bogenmaß". Gibt aber ne Funktion zur umrechnung.
MfG
BASTIUniversal
15.07.2006, 19:34
Hi!
So richtig funktioniert hat das nicht mit deiner Formel @JanB...siehe Anhang! Dafür hab ich die Sache mit der Linie etwas ausgebaut. Jetzt läuft das Teil auch mal mit reelen Werten von einem GP2D12.
X = cos(Winkel) * Messwert * 150 / 255
Y = sin(Winkel) * Messwert * 150 / 255
Hmm, die Anpassung an die 150, 150 als Mittelpunkt kommt mir doch etwas suspekt vor.
Im Moment dürften da lediglich Koordinaten von -150 bis 150 herauskommen.
Eigentlich müsste man zu dem Ergebniss noch einen Offset von 150 hinzurechnen.
Im Übrigen interessiert mich im Moment noch, wo bei deinem Model die 0° definiert sind.
Grüße,
da Hanni.
Hallo,
Ja stimmt, da muss jeweils noch 150 draufaddiert werden,
um den Ursprung in die Mitte zu setzen.
Das 150/255 ist zur Skalierung.
also:
X = cos(Winkel) * Messwert * 150 / 255 + 150
Y = sin(Winkel) * Messwert * 150 / 255 + 150
0 Grad sind jetzt rechts also bei 3 Uhr.
Das ergibt sich doch aus x=cos... und y=sin...
Denn cos(0)=1 und sin(0)=0.
Wenn 0 Grad z.B. bei 12 Uhr sein sollen,
muss du beim Winkel 90 abziehen, oder 270 addieren,
oder X und Y vertauschen und 0-X und 0-Y nehmen.
Gruß Jan
BASTIUniversal
16.07.2006, 14:13
Hi!
Jetzt funktioniert's! Im Anhang mal ein Bild...6° pro Wert, 168° Drehung. Die Halbkreise entsprechen 10cm...ganz Innen ist noch einer mit 15cm.
Jetzt muss ich nurnoch nen Roboter bauen, um den Sensor richtig einsetzen zu können :-b
Danke für eure Hilfe...alleine hätt ich das mit den Formeln nie hinbekommen!
Was für Werte bekommst du denn da? Bzw was zeigt dein Halbkreis an?
EDIT:
Ah ok, habs kapiert. Du machst im Prinzip ein "Rundum-Bild"? Wie lange dauert denn das wenn man Fragen darf, bis er sich "umgeguckt" hat?
BASTIUniversal
01.09.2006, 14:52
Hi!
Die Geschwindigkeit war relativ gering eingestellt...nach ca. 5 Sekunden ist der ganze Spaß vorbei und der Sensor wieder in seiner Ursprungsposition.
MfG
Ich mach' sowas ähnliches. Da du mit dem GP nur ca 20 Meßungen in der Sekunde machen kannst, und das Servo (Ich hab Servo statt Schritt) sich ja auch positionieren muß, geht das schon in die Länge.
EDIT: Aber wenn man's nicht zu eilig hat, ist das Ergebnis recht brauchbar, um sich zum Beispiel zwischen Stuhlbeinen durchzuschwindeln. (Da bin ich aber noch am werken, dzt. "Grundlagenforschung")
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.