Zum Inhalt springen

quorti

Mitglieder
  • Gesamte Inhalte

    2
  • Benutzer seit

  • Letzter Besuch

  1. Hi runtimeterror. Mein ziel ist quasi einen Kreisbogen mit linearen Koordinaten abzubilden. So ein bisschen wie beim Malen nach Zahlen, dass die Punkte mit Linien verbunden (nahezu) einen Kreis ergeben.
  2. Hallo zusammen, ein Kumpel und ich sind im Rahmen eines kleinen Projektes dabei eine CNC-Fräse an den Achsen mit Schrittmotoren auszustatten, welche mit einem Arduino verbunden sind. Der Arduino bekommt seine Befehle vom Parser, der wiederum seine Kommandos von G-Code kriegt. Da wir nur eine dreiachsige Fräse haben können wir keine Bogen fahren und somit den G02 von G-Code nicht ausführen. Dafür bin ich seit einiger Zeit dabei die Koordinaten einer Kugel in das Kartesische Koordinatensystem zu übersetzen. Gegeben (vom Parser) werden: der Startpunkt, der Endpunkt und der Mittelpunkt. Zum Testen habe ich eine kleine Klasse, die mir die Punkte in ein dreidimensionales Koordinatensystem einzeichnet. Soweit so gut - und auf der x/y-Ebene funktioniert das wunderbar. Soviel kurz zu Einleitung. Jetzt mein Problem: kommen z-Werte dazu (^= bewegen wir uns im dreidimensionalen Raum) gibt es auf der x/z- und auf der y/z-Ebene ein gestrecktes "S" (sieht eher wie das Integral-Zeichen aus), wenn man direkt von oben drauf schaut (logischerweise sollte der Kreisbogen dann wie eine Linie aussehen). Ich gehe bei der Berechnung so vor, dass ich anhand der zwei gegebenen Punkte zu allererst den Radius berechnen. Dann berechne ich die Winkel Berechnung "winkel" (Winkel zwischen z-Achse und dem Punkt): winkel = 180*Math.acos(((_p3dPointMin.z - _p3dUrsprung.z) / _intRadius))/Math.PI Berechnung phi (Winkel zwischen x-Achse und dem Punkt): if(point.x > 0) phi = Math.atan(point.y/point.x); if(point.x == 0) phi = Math.signum(point.y)*Math.PI/2; if(point.x < 0 && point.y >= 0) phi = Math.atan(point.y / point.x) + Math.PI; if(point.x < 0 && point.y < 0) phi = Math.atan(point.y / point.x) - Math.PI; Die Berechnung dieser beiden Winkel führe ich für beide gegeben Punkte durch. Damit habe ich dann insgesamt vier Winkel: 1. winkelVon 2. winkelBis 3. phiVon 4. phiBis Dann schaue ich bei welchem der "Hauptwinkel" die Differenz zwischen Von und Bis höher ist und nehme diese Differenz als die Anzahl der zu laufenden Schritte und setzte die Schrittgröße dieses Winkels auf 1. Die Schrittgröße des anderen "Hauptwinkels" errechnet sich dann über dessen Differenz geteilt durch die Anzahl der zu laufenden Schritte. Habe ich diese Werte, laufe ich in einer Schleife von 0 bis zur Anzahl der Schritte und erhöhe "winkel" und "phi" jeweils um deren Schrittgröße. Für jede "Winkelkombination" errechne ich dann wie folgt den jeweiligen Punkt: x = _p3dUrsprung.x + _intRadius * Math.sin(Math.PI*winkel/180) * Math.cos(Math.PI*phi/180); y = _p3dUrsprung.y + _intRadius * (Math.sin(Math.PI*winkel/180)) * Math.sin(Math.PI*phi/180); z = _p3dUrsprung.z + _intRadius * Math.cos(Math.PI*winkel/180); Wobei _p3dUrsprung der Kugelmittelpunkt und _intRadius der Radius der Kugel sind. (Darauf werden die Werte gerundet und es wird geprüft, ob sie innerhalb der angegeben Toleranz liegen (also für die Fräse abildbar sind), aber das klammere ich an dieser Stelle erstmal aus). Als letztes schreibe ich diesen Punkt in eine ArrayList, welche am Ende dann zurückgegeben wird, wenn die Schleife fertig gelaufen ist. Da die x/y-Ebene korrekt dargestellt wird ist meine Vermutung, dass das Problem entweder in der Berechnung von "winkel" oder in meiner Schleifenlogik liegt. Ich wäre äußerst glücklich, wenn mir vielleicht jemand weiterhelfen könnte. Achja: geschrieben ist das Ganze aktuell in Java, aber hier geht es eher um den Algorithmus, daher habe ich das mal hier gepostet. LG und schon im Voraus vielen Dank, quorti (PS: SuFu habe ich benutzt, aber nichts hilfreiches gefunden)

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...