Seltsames Phänomen mit three.js-Ebene

9

Das ist die erste Frage, die ich hier gestellt habe! Entschuldigung im Voraus, wenn ich es irgendwie falsch gemacht habe.

Ich habe ein Programm geschrieben, das Kugeln in drei .js aufstapelt.

Jede Kugel beginnt mit zufällig erzeugten (innerhalb bestimmter Grenzen) x- und z-Koordinaten und einer y-Koordinate hoch über der Grundebene. Ich werfe Strahlen von jedem der Scheitelpunkte der Kugel ab, um zu sehen, wie tief sie fallen kann, bevor sie sich mit einem vorhandenen Gitter schneidet.

Für jede Kugel teste ich sie in 80 verschiedenen zufälligen xz-Positionen, sehe, wo sie am weitesten fallen kann, und lasse sie dann in diese Position fallen.

Dies soll Blasentürme wie diesen erzeugen:

Allerdings habe ich bemerkt, dass wenn ich den Blasenradius sehr klein mache und die Basisabmessungen des Turms groß sind, geschieht dies:

Wenn ich die Rekursionen von 80 heruntersetze, ist dieser Effekt weniger offensichtlich. Aus irgendeinem Grund scheint three.js zu denken, dass die Sphären weiter an den Ecken des Basisquadrats fallen können. Der Ursprung ist genau in der Mitte des Basisquadrats - vielleicht ist das relevant.

Wenn ich alle Fallstrecken, die ich vom Rycaster erhalte, in der Konsole logge, sind sie in der Tat umso größer, je weiter man von der Mitte des Quadrats entfernt ist ... aber nur auf der 11. oder 12. Dezimalstelle.

Dies ist nicht so sehr ein Problem, das ich zu lösen versuche (ich könnte einfach die Entfernung auf die nächste Zehntel-Dezimalstelle zurückdrehen, bevor ich die Größte auswähle), aber etwas, worauf ich sehr neugierig bin. Weiß jemand, warum das passiert? Ist jemand schon einmal auf etwas ähnliches gestoßen?

BEARBEITEN:

Ich habe meinen Code bearbeitet, um alles so zu verschieben, dass der Ursprung nicht mehr im Mittelpunkt des Basisquadrats steht:

So bin ich richtig im Denken ... dieses Phänomen hat etwas mit der Entfernung vom Ursprung zu tun, anstatt irgendetwas in Bezug auf die Oberfläche, auf die die Kugeln fallen?

    
Martha 06.10.2015, 12:18
quelle

1 Antwort

0

In der Tat, das Muster, das Sie sehen, ist genau, weil die Ecken und Kanten der Unterseite Ihres Turms am weitesten von dem Ursprung entfernt sind, an dem Sie die Bälle fallen lassen. Du erschaffst ein rechtes Dreieck (siehe Bild unten), in dem das vertikale "Bein" die Linie vom Ursprung ist, von dem du die Bälle bis zum Punkt direkt unter dem Gitterboden fallen lässt (bei a rechter Winkel zum Boden - also der Name, rechtes Dreieck ). Die Hypotenuse ist immer der längste Schenkel eines rechtwinkligen Dreiecks, und je weiter Ihre Strahlen von dem Punkt unmittelbar unter dem Ursprung ausgehen, desto länger wird die Hypotenuse sein, und desto mehr wird Ihr Algorithmus dies länger bevorzugen Entfernung (egal wie gebrochen).

Die Vergrößerung der Turmbasis würde diesen Effekt übertreiben, da die Hypotenusen-Messungen jetzt noch größer werden können. Das Verringern der Größe der Bälle würde auch das Muster, das Sie sehen, begünstigen, da jetzt jeder Ball nicht so viel Platz einnimmt und die entfernten Messungen zu den Ecken nicht so schnell wie bei größeren Bällen ausgefüllt werden Jetzt sammeln sich mehr Kugeln an den Rändern, bevor der Rest des Raumes ausgefüllt wird.

Wenn Sie Ihren fallenden Ursprung auf die eine oder andere Seite verschieben, erzeugen Sie längere Distanzen (Hypotenusen) zu den gegenüberliegenden Seiten und Ecken, so dass die Kugeln zuerst diese entfernten Stellen ausfüllen.

Der Grund, warum Sie weniger sehen, wenn Sie die Stichprobengröße von 80 auf 20 reduzieren, ist, dass es einfach weniger Möglichkeiten gibt, diese entfernteren Orte zu entdecken, zu denen die Bälle fallen könnten (ein Quotenspiel) / p>

Ein rechtwinkliges Dreieck:

Eine Skizze aus der Serviette:

    
gromiczek 29.11.2016 05:30
quelle

Tags und Links