Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die keine Eingabe akzeptiert und einen Vektor der Länge in einer theoretisch einheitlichen Zufallsrichtung ausgibt .
Dies entspricht einem zufälligen Punkt auf der Kugel, der durch
was zu einer Verteilung wie z
Ausgabe
Drei floats aus einer theoretisch gleichmäßigen Zufallsverteilung, für die die Gleichung für Genauigkeitsgrenzen gilt.
Herausforderungsbemerkungen
- Die Zufallsverteilung muss theoretisch gleichmäßig sein . Das heißt, wenn der Pseudozufallszahlengenerator durch ein echtes RNG aus den reellen Zahlen ersetzt würde, würde dies zu einer gleichmäßigen Zufallsverteilung der Punkte auf der Kugel führen.
- Das Erzeugen von drei Zufallszahlen aus einer Gleichverteilung und deren Normalisierung ist ungültig: In Richtung der Ecken des dreidimensionalen Raums besteht eine Tendenz.
- In ähnlicher Weise ist es ungültig, zwei Zufallszahlen aus einer gleichmäßigen Verteilung zu erzeugen und als Kugelkoordinaten zu verwenden: Es besteht eine Tendenz zu den Polen der Kugel.
- Die richtige Einheitlichkeit kann durch Algorithmen erreicht werden, einschließlich, aber nicht beschränkt auf:
- Generieren Sie drei Zufallszahlen , und aus einer normalen (Gaußschen) Verteilung um und normalisieren Sie sie.
- Generieren Sie drei Zufallszahlen , und aus einer Gleichverteilung im Bereich . Berechnen Sie die Länge des Vektors mit . Wenn dann, lehnen Sie den Vektor ab und erzeugen Sie eine neue Menge von Zahlen. Sonst, wenn , normalisiere den Vektor und gib das Ergebnis zurück.
- Erzeugen Sie aus einer Gleichverteilung im Bereich ( 0 , 1 ) zwei Zufallszahlen und und rechnen Sie sie wie folgt in Kugelkoordinaten um:so dass,unddurch x berechnet werden können
- Geben Sie in Ihrer Antwort eine kurze Beschreibung des von Ihnen verwendeten Algorithmus an.
- Lesen Sie mehr über die Auswahl von Kugelpunkten in MathWorld .
Ausgabebeispiele
[ 0.72422852 -0.58643067 0.36275628]
[-0.79158628 -0.17595886 0.58517488]
[-0.16428481 -0.90804027 0.38532243]
[ 0.61238768 0.75123833 -0.24621596]
[-0.81111161 -0.46269121 0.35779156]
Allgemeine Bemerkungen
- Das ist Code-Golf , also gewinnt die Antwort mit den wenigsten Bytes in jeder Sprache.
- Es gelten Standardregeln , E / A-Regeln und Regelungslücken .
- Bitte fügen Sie einen Try it Online- Link oder einen vergleichbaren Link hinzu, um die Funktionsweise Ihres Codes zu demonstrieren.
- Bitte begründen Sie Ihre Antwort mit einer Erklärung Ihres Codes.
pi/6 ≈ 0.5236
, eine Ausgabe zu produzieren. Das ist die Fläche der Kugel, die in den Einheitsflächenwürfel