Optimale Flugbahn über die Oberfläche einer Kugel

9

Ich versuche die parametrische Gleichung der Flugbahn eines Punktes zu finden, der über verschiedene Punkte auf der Oberfläche einer Einheitskugel springt, so dass:

  1. jeder Sprung ist klein (pi / 4 & lt; d & pi; / 2) und in einem engen Intervall, z.B. [1.33, 1.34]
  2. Der Punkt besucht die meisten Regionen der Sphäre so schnell und einheitlich wie möglich
  3. der Punkt reist entlang "Richtungsvektoren" so unterschiedlich wie möglich

Das habe ich versucht

%Vor%

BEARBEITEN - & gt; Kann jemand eine gleichmäßigere Flugbahn finden, die die Kugel möglicherweise schneller (d. h. mit der kleinsten Anzahl von Sprüngen) und gleichmäßiger abdeckt? Regelmäßige Flugbahn in dem Sinne, dass sie die Richtung reibungslos, nicht scharf ändern sollte. Ästhetische Schönheit ist ein Bonus. Die Punkte sollten möglichst gleichmäßig auf der Oberfläche der Kugel verteilt sein.

    
user1118321 29.10.2013, 20:26
quelle

5 Antworten

2

Ändern Sie den Anfang Ihres Codes, um eine Drehung der zugrunde liegenden Sphäre einzuführen. Dies ergibt eine Flugbahn, die nicht so häufig zu den Polen zurückkehrt. Es kann einige Anpassungen der Rotationsgeschwindigkeiten erfordern, um "nett" auszusehen (und es sieht wahrscheinlich besser aus, wenn es nur um eine Achse rotiert, nicht alle 3). rot_angle1 ist eine Rotation um die x-Achse und rot_angle2 und rot_angle3 sind eine Rotation um die y- und z-Achse. Vielleicht gibt dir das zumindest eine Idee!

%Vor%     
David 01.11.2013, 02:16
quelle
1

Ich habe keine Kopie von Matlab zur Hand, aber ich werde die Änderungen veröffentlichen, die ich an Ihrer Kurve vornehmen würde.

Nur um klar zu sein, da es n-Finity + 1 verschiedene Definitionen für sphärische Winkel gibt. Ich werde das Folgende verwenden, es ist rückwärts von Ihrer Definition, aber ich bin verpflichtet, Fehler zu machen, wenn ich versuche und schalte.

  • \phi - der Winkel von der Z-Achse
  • \theta - der projizierte Winkel in der x-y-Ebene.

Die Parametrierung

Sei t eine diskrete Menge von N gleichmßig verteilten Punkten von 0 bis pi (inklusive).

%Vor%

Eher geradlinig und einfach ist eine Spirale um eine Kugel linear in \phi und theta . c ist eine Konstante, die die Anzahl der vollen Rotationen in \theta darstellt, sie muss nicht Integer sein.

Benachbarte Punkte

In Ihrem Beispiel berechnen Sie den Winkel zwischen Vektoren mit atan2(norm(cross....) , was in Ordnung ist, gibt aber keinen Einblick in das Problem. Dein Problem liegt auf der Oberfläche einer Kugel, nutze diese Tatsache . Also betrachte ich die Entfernung zwischen den Punkten mit dieser Formel

Sie finden nun Nachbarpunkte, die bei t +- dt und theta +- 2pi auftreten, egal was passiert.

Im ersten Fall t +- dt ist es einfach, cos(gamma) = 1 - 2 c^2 sin^2(t) dt^2 zu berechnen. Die sin^2(t) Abhängigkeit ist der Grund, warum die Pole dichter sind. Idealerweise möchten Sie theta(t) und phi(t) so wählen, dass dtheta^2 * sin^2(phi) konstant und minimal ist, um diesen Fall zu erfüllen.

Der zweite Fall ist ein bisschen schwieriger und bringt meine Kommentare über "Staffelung" Ihrer Punkte. Wenn wir ein N so wählen, dass dtheta 2pi nicht gleichmäßig teilt, dann kann nach einer vollen Drehung um die Kugel in theta ich nicht direkt unter einem vorherigen Punkt enden. Um den Abstand zwischen Punkten in diesem Fall zu vergleichen, verwenden Sie delta t , also c delta t = 1 . Dann haben Sie delta phi = delta t und delta theta = 2 c delta t - 2pi . Abhängig von Ihrer Wahl von c , delta phi kann oder kann nicht klein genug sein, um die kleinen Winkelnäherungen zu verwenden.

Schlussnotizen

Es sollte offensichtlich sein, dass c=0 eine gerade Linie entlang der Kugel ist. Wenn Sie c erhöhen, erhöhen Sie die "Dichte der Spirale" und erhalten mehr Abdeckung. Sie erhöhen jedoch auch die Entfernung zwischen benachbarten Punkten. Sie werden ein c für das gewählte N wählen müssen, das die obigen zwei Abstandsformeln ungefähr gleich macht.

BEARBEITEN einige Sachen für Sauberkeit in Mathbin verschoben

    
kalhartt 01.11.2013 05:23
quelle
0

Ich bearbeite hier, weil es ein langer Code ist. Nach den Hinweisen von David und kalhartt habe ich folgendes versucht:

%Vor%

Ich denke, es ist viel besser als vorher! Zwei Dinge, die ich für wichtig halte: 1. theta_sph muss viel schneller sein als phi_sph, um zu vermeiden, zu oft zwei entgegengesetzte Pole zu besuchen; 2. Wenn theta_sph schneller ist als phi_sph, dann musst du langsam über entweder rot_angle1 oder rot_angle2 rotieren, um eine nicht zu chaotische Trajektorie zu erhalten. Ich bin noch offen für irgendwelche anderen Hinweise, um das Ergebnis zu verbessern.

    
user2875617 01.11.2013 05:06
quelle
0
%Vor%

edit: myfigure und myaxes sind Funktionen, die ich habe, um eine Figur und eine Achse zu erstellen

    
Alex Byasse 06.11.2013 07:20
quelle
0

Ich habe eine schnelle Version in C geschrieben, die sich bei einer festen Anzahl von Punkten sehr gut verhält. Sie können damit bei ideone spielen. Wenn Sie einen WebGL-fähigen Browser (Chrome, Firefox) haben, können Sie diese Ergebnisse hier einfügen , um sie anzuzeigen. Die Pole sind wegen einiger integraler Annäherungen, die beim Ableiten der Formeln verwendet werden, ein wenig aus, aber ansonsten ist es schwierig, einen Fehler zu sehen. Es gibt keine Konstanten, die optimiert werden müssen, außer der Anzahl der Punkte, für die Sie eine Ausgabe wünschen.

%Vor%     
Kaganar 07.11.2013 23:24
quelle