Erstelle eine Kugel mit äquidistanten Ecken

8

Ich versuche ein kugelförmiges Strahlenbündel zu erzeugen, um Kollisionen zu überprüfen, aber spezifische Wechselwirkungen treten auf, je nachdem, wo oder wo jeder Strahl auftrifft. Daher verwende ich Strahlen statt etwas einfacher als OverlapSphere .

Der Grund, warum ich nach einer Kugel suche, ist, weil ich dieselbe Mathematik für meine Strahlen verwenden kann, indem ich sie zu den Eckpunkten der Kugel bewegen lasse. Aber auf jede Weise, die ich für die Herstellung einer Kugel finden kann, sind die Linien den Polen näher gekommen, was sinnvoll ist, da es ziemlich einfach ist. Aber wie Sie sich vorstellen können, ist es nicht so nützlich für mein aktuelles Projekt.

TL; DR: Wie mache ich eine Kugel mit äquidistanten Ecken? Wenn es nicht gleich gut ist, muss es nur knapp schließen. Wenn das passiert, wäre es großartig, wenn Sie angeben könnten, wie groß der Unterschied sein würde und wo, falls zutreffend.

Zusätzliche Hinweise: Ich habe mir dieses und

Matrixian 29.07.2014, 10:02
quelle

6 Antworten

4

Ist dir bewusst, dass die Sphäre , die dir von Unity gegeben wurde, tatsächlich entworfen wurde

?

mit genau diesem Ziel?

Das heißt, der ganze Daseinszweck der Sphäre, die in Unity eingebaut ist, ist, dass die Punkte ziemlich glatt sind ... ungefähr gleich weit entfernt, wie Sie es formulieren.

Um eine solche Sphäre in Unity zu bringen, mach einfach folgendes:

Sie können dann sofort Zugriff auf die Verts bekommen, wie Sie wissen

%Vor%

Beachten Sie, dass Sie einfach überprüfen können, "an welchem ​​Teil der Kugel" sie sich befinden, indem Sie beispielsweise prüfen, wie weit sie von Ihren "Städten" entfernt sind (oder was auch immer) Hemisphäre sind sie .. und so weiter.

Außerdem ...

Bitte beachten Sie. Zu Ihrem allgemeinen Grund, dies zu tun:

  

aber spezifische Interaktionen passieren, abhängig davon, wo oder wo jeder Strahl

trifft

Beachten Sie, dass dies mit PhysX nicht einfacher sein kann. (Die vollständig integrierte Spielphysik in Unity.) Tatsächlich habe ich niemals eine Kollision betrachtet, ohne etwas "Spezifisches" zu tun, abhängig davon, "wo es getroffen hat!"

Sie können beispielsweise den Punkt ermitteln, an dem der Kontakt mit Ссылка

hergestellt wurde

Es ist erwähnenswert, dass es absolut unvorstellbar ist, dass man etwas schreiben könnte, das sich der Performance von PhysX in der Gelegenheits-Programmierung nähert.

Ich hoffe, das macht die Dinge einfacher!

    
Fattie 16.02.2016, 01:36
quelle
5

Sie könnten eine Icosphäre verwenden. Da die Scheitelpunkte auf gleichseitigen Dreiecken verteilt sind, sind Ihre Scheitelpunkte garantiert äquidistant.

Um die Ikossphäre zu konstruieren, erstellen Sie zunächst ein Ikosaeder und teilen dann die Flächen rekursiv in kleinere Dreiecke auf, wie in diesem Artikel .

    
Elie Gnrd 19.08.2015 10:38
quelle
3
  1. Schneiden Sie die Kugel in N Kreise
  2. berechnen Sie den Umfang davon
  3. teile es durch denselben Winkel, der die Scheibe erzeugt
    • Dies gibt Ihnen die Anzahl der Scheitelpunkte
    • und auch Winkelschritt innerhalb des Kreises
  4. Bestrahlungsstrahlen

So habe ich es in C ++ + OpenGL codiert:

%Vor%

So sieht es aus:

  • R, G, B Linien sind die Kugelkoordinatensystemachsen X, Y, Z
  • Weiße Linien sind Ihre Scheitelpunkte (Weiß) + Richtung (Grau)

[Hinweise]

  • Vergessen Sie nicht, math.h
  • einzuschließen
  • und ersetze die OpenGL-Sachen durch deine
Spektre 30.07.2014 08:08
quelle
2

Wenn Sie 4, 6, 8, 12 oder 20 Scheitelpunkte haben möchten, können Sie genau äquidistante Scheitelpunkte als Platonischen Körper die alle in eine Kugel passen. Die tatsächlichen Koordinaten dieser sollten leicht zu bekommen sein. Für andere Anzahlen von Scheitelpunkten können Sie andere Polyeder verwenden und die Scheitelpunkte so skalieren, dass sie auf einer Kugel liegen. Wenn Sie viele Punkte benötigen, kann eine geodätische Kuppel eine gute Basis sein. Der C60 Bucky-Ball könnte mit 60 Punkten eine gute Basis sein. Für die meisten von ihnen sollten Sie in der Lage sein, 3D-Modelle zu finden, aus denen Sie Koordinaten extrahieren können.

    
Salix alba 29.07.2014 11:54
quelle
0

Ich denke, der einfachste Weg, um Punkte auf einer Kugel zu kontrollieren, ist sphärische Koordinaten . Dann können Sie die Position von Punkten um die Kugel herum steuern, indem Sie zwei Winkel (rho und phi) und den Radius verwenden.

Beispielcode zum gleichmäßigen Füllen von Punkten um eine rotierende Kugel:

%Vor%     
glopes 29.07.2014 10:49
quelle
0

Wie einige Antworten bereits vorgeschlagen haben, verwenden Sie eine ikosaederbasierte Lösung. Die Quelle dafür ist ziemlich leicht zu bekommen (und ich habe einige Male selbst geschrieben), aber ich finde das ausgezeichnete Primitives Pro -Plugin unter vielen anderen Umständen extrem praktisch und benutze immer ihre Sphäre statt der eingebaute Einheit eins.

Link zur Primitives Pro-Komponente

Primitives Pro Optionen

    
LITM 12.04.2016 10:04
quelle

Tags und Links