Forum: Mikrocontroller und Digitale Elektronik Kreis auf Kugeloberfläche


von albundy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Gemeinde,

ich habe eine Kugel aus LED's, also einen LED-Ball (siehe Anhang).
Zu Ansteuerung des Ball gibt es von mit eine Software mit der die 
einzelnen LEDs in Kugelkoordinaten angesteuert werden.
Ich möchte gerne auf der Kugeloberfläche einen Kreis abbilden. Kennt 
vielleicht jemand die Formel, mit der man einen Kreis (Kleinkreis) auf 
der Kugeloberfläche in Kugelkoordinaten zeichnen kann?
Alternativ würde mir auch die Formel für einen Großkreis für einen 
beliegen Azimutwinkel PHI und Polarwinkel THETA reichen.
Prof. Google gibt da nichts her.
Bezugspunkt ist immer der Kugelmittelpunkt.


Gruß

Albundy

von Zapp (Gast)


Lesenswert?

Ein wenig Geometrie, ein paar Gleichungen. Was soll Gurgel denn bringen 
? Wie man die Gleichung fuer die Kugel mit der Gleichung fuer einen 
Ebene verbindet und loest ?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Vllt findeste ja ne Formel wenn du bei Google nach Parametrisierung und 
Kurvenintegral suchst.
Dann findeste vllt ne Uniübung mit Lösung zu dem Thema.

Ansonsten selber ausrechnen, ich mach das heute Abend aber nicht mehr.
(Wir hatten das Thema grade würg)

von Sven B. (scummos)


Lesenswert?

Du kriegst auf jeden Fall Kreise, wenn du alle Punkte mit konstantem Phi 
oder konstantem Theta anmalst. Alle möglichen Kreise sind das aber 
noch nicht... müsste ich jetzt auch rechnen ;)

von Carl Friedrich Gauß (Gast)


Lesenswert?

Falls nicht die Fahrschule die Krönung deiner Bildungslaufbahn gewesen 
ist,
wird dich die Parameterdarstellung eines Punktes auf der Kugeloberfläche
hieraus
http://de.wikipedia.org/wiki/Kugel
kombiniert mit der Parameterdarstellung eines Kreises
daraus
http://de.wikipedia.org/wiki/Kreis
zum Ziel deines Begehrens führen :-)

von Karl H. (kbuchegg)


Lesenswert?

Einen beliebigen Kreis in einer beliebigen Orientierung auf einer 
idealen Kugel abzubilden ist leicht. DIe Verdrehung aus der Ausgangslage 
ist eine Matrix und dann hachelt man einfach Punkte vom Kreisumfang in 
der Ausgangslage durch die Matrix und kriegt die entsprechenden 
Abbildungspunkte auf der Kugel.
Nur überseht ihr die Diskretisierung durch die vorgegebene Geometrie der 
LED-Anordnung. Die macht das Problem schwer, wenn die Lösung dann auch 
noch effizient sein soll.

Im Grunde ist es das 3D Analogon zum Problem eine Bitmap zu drehen und 
zu bestimmen, an welcher Zielposition ein Pixel aus dem Ausgangsbild 
auftaucht. Und zwar ohne, dass dabei Löcher entstehen (im Grunde muss 
man rückwärts rechnen: welches Quellpixel wird an einem gegebenen 
Zielpixel abgebildet und wenn es kein eindeutiges Quellpixel gibt, wird 
eines aus den 4 benachbarten Pixel interpoliert). Nur dass das ganze 
hier in 3D stattfindet und die Regelmässigkeit des Rasters nicht gegeben 
ist.


Ich könnte  mir vorstellen, dass ein gangbar schneller Weg darin 
besteht, die Sache anders aufzuziehen: Der abzubildende Kreis liegt ja 
in einer Ebene. Von dieser Ebene bestimmt man sich die Ebenengleichung 
und dann rattert man die ganzen Segmentbögen von oben nach unten durch 
und bestimmt ob die jeweilige LED über oder unter der Ebene liegt. Beim 
0-Durchgang durch diese Ebene (Vorzeichenwechsel) schaltet man eine der 
beiden benachbarten LED ein (je nachdem welche näher an der Ebene 
liegt). Diese Distanzrechnung ist schnell zu machen (3 Multiplikationen 
und 4 Additionen) wenn man erst mal die Ebenengleichung hat. Zudem kann 
man in einer fortgeschrittenen Version des Verfahrens ausnutzen, dass 
der Schnittpunkt mit der Ebene beim nächsten Segmentbogen sich nicht 
stark vom Schnittpunkt im zuletzt untersuchten Bogen unterscheiden wird.
Das würde zumindest für Großkreise funktionieren. Bei Kleinkreisen kann 
ein Segmentbogen natürlich mehrere Schnitte haben. Da wirds dann 
komplizierter.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

1) Die Kugeloberfläche wird je nach LED-Verteilung in Teilflächen
   aufgeteilt.  Jede LED ist für die Beleuchtung ihres Teilstückchens
   "verantwortlich".

2) Berechne die Parameterdarstellung eines Kleinkreises, etwa
   Polare θ = const. In dem Falle ist der Parameter gerade der Azimut ϕ.

3) Transformiere diesen Kreis an die gewünschte Stelle.  Der
   Ursprungskreis liegt dabei rotationssymmetrisch um den Zenit.
   Hier kann sich Möbiusisometrien als hilfreich erweisen:
   http://de.wikipedia.org/wiki/Möbiustransformation#Isometrien

4) Berechne, welche Teilstückchen der so transformierte Kreis schneidet.
   Die jeweils verantwortliche LED leuchtet.

Hinweis:

Eine Möbiustrafo M transformiert immer Kreise in Kreise, and zwar auch 
denn, wenn man ihre Aktion in der komplexen Ebene betrachtet.  Dabei 
werden Geraden als Kreise mit unendlich großem Radius angesehen, die 
durch den Pol (Unendlich) verlaufen.

"Möbius Transformations Revealed is a wonderful video clarifying a deep 
topic"
http://www.ima.umn.edu/~arnold/moebius/index.html

In der komplexen Ebene ist das Problem vielleicht besser arithmetisch 
zugänglich.  So werden die LED-Stücke durch solche Stücke solcher Kreise 
begrenzt.  Diese wiederum können vermutlich ohne großen Qualitätsverlust 
durch Strecken oder Halbgeraden modelliert werden.  Kantenstückchen, die 
auf einem Meridian liegen, werden ohnehin zu Strecken oder Halbgeraden.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

die Frage ist, ob sich die ganze Rechnerei lohnt - die Kreise werden 
beschissen aussehen. Dazu kommt noch, dass die abgebildete Kugel um 
mindestens den Faktor 4 zuwenige LEDs hat, um überhaupt irgendetwas 
abzubilden. Dazu müsste die Kugeloberfläche dicht mit LEDs besetzt sein 
(wobei die Anordnung ein Problem für sich darstellt). Aus 
Grosskreisscheiben kann man so eine Kugel jedoch nicht zusammensetzen, 
eher schon aus 5- und 6-Ecken wie einen traditioneller Fussball (bzw. 
Fulleren).

Gruss Reinhard

von Sven B. (scummos)


Lesenswert?

Ich stimme Reinhard zu. Du kannst die Großkreise in beide Richtungen 
anzeigen, und wahrscheinlich noch die Kreise mit Theta konstant, aber 
alle anderen werden als Kreis kaum zu erkennen sein. Das Rechnen lohnt 
sich wohl kaum.

von chris (Gast)


Lesenswert?

Idee:

Wenn Du dich auf einer X-Y Ebene befindest, kannst Du eine Gerade 
schrittweise zeichnen.

x+=dx;
y+=dy;

Das Verhältnis dy/dx gibt die Richtung.

Wenn Du die LEDs auf der Kugel über die Winkel Phi und Theta 
adressierst, könnte folgendes einen Kreis ergeben:

phi+=dphi;
theta+=dtheta;

Probe: setzt man dphi auf 0, ergibt sich ein Kreis auf dem Umfang der 
Kugel.

von Martin B. (gonative)


Lesenswert?

Bei so wenig LEDs würde ich die Punkte per Hand setzen und in einer 
Tabelle ablegen. Es können dann auch Kreissegmente sein, die gespiegelt 
werden.

von Nobbi (Gast)


Lesenswert?

Sind das Photos oder Renderbilder? Hast du die gebaut?

von R.Enderer (Gast)


Lesenswert?

Nobbi schrieb:
> Sind das Photos oder Renderbilder? Hast du die gebaut?
Guck dir mal den "Tisch" und die LEDs an ;-)

von Pink S. (pinkshell)


Lesenswert?

Die Konstruktion des zentralen Steckverbinders würde mich mal 
interessieren.

von albundy (Gast)


Lesenswert?

Hallo zusammen,

erst mal vielen vielen Dank an alle.
Die Kugel habe ich aufgebaut, basierend auf dem thread

Beitrag "LED Blinky Ball Monochrom"

Das Bild ist gerendert.

Was aber das geometrische Problem betrifft:

Die Auflösung der Kugel ist nicht sonderlich gut, aber für meine Zwecke 
ausreichend. Meine geometrischen Kenntnisse sind etwas eingerostet. Ich 
hatte die Hoffnung, dass es eine einfache Formel gibt, die der ATMega 
noch in einer annehmbaren Zeit berechnen kann.
Ich werde versuchen, diese mir herzuleiten. Kreise durch Rotation von 
Phi und Theta funktioniert aber schon. Eben nur Kreise in beliebiger 
Position auf der Kugeloberfläche nicht.

Trotzdem nochmals Danke an euch.

Gruß

Albundy

von Kugelkönig (Gast)


Lesenswert?

Hallo

Kugel Radius R,
Kreis um Mittelpunkt M(Mb,Ml) mit Radius r < R*pi/2 = Umfang/4
Für einen beliebigen Mittelpunktswinkel (KMN)=y, (N=NPol , 0 < y < pi) 
liegt der Punkt K(b,l) auf der Kreislinie, falls gilt:

b = arcsin(SB)
l1 = Ml + arccos( ( cos(r/R)-sin(Mb)*SB ) / ( cos(Mb)*sqrt(1-SB^2) ) )
l2 = Ml - arccos ...

wobei
SB = cos(r/R)*sin(Mb) + sin(r/R)*cos(Mb)*cos(y)


Probleme:
Anfallende Geo-Winkelbereichsüberschreitungen entsprechend anpassen
Für y=0 wie auch y=pi (K liegt auf Mittelpunkts-Vollmeridian), kann aus 
Gründen der Rechengenauigkeit, das arccos-Argument geringfügig aus dem 
zulässigen Bereich -1 ... +1 herausfallen und ist in diesem Fall
für < -1 durch -1 und für > 1 durch 1 zu ersetzen.
(Möglicherweise arbeitet die Formel auch für den r-Bereich bis zu r < 
Umfang/2 problemlos)

Die Koordinaten sind geographische Koordinaten (Breite,Länge) und sind 
nach! Berechnung, geeignet in Kugelkoordinaten umzusetzen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.