-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Werte in einem Halbkreis anordnen!?

  1. #1
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228

    Werte in einem Halbkreis anordnen!?

    Anzeige

    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!
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken halbkreis.jpg   linie_207.jpg  

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    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

    Grüße,

    da HAnni.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    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

  4. #4
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    Zitat Zitat von Hanni
    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

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    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

  6. #6
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    Danke für die Erklärung!
    Ich hab's getestet...das Programm rechnet mit dem "Bogenmaß". Gibt aber ne Funktion zur umrechnung.

    MfG

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    RAD = Bogenmaß...

  8. #8
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    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.
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken linie2.jpg   berechnet.jpg  

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.07.2005
    Beiträge
    569
    Zitat Zitat von JanB
    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.

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    10.12.2004
    Ort
    LEV
    Beiträge
    505
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •