Das Erzeugen von zufälligen Positionen kann etwas tückisch werden, da das Spiel mit kartesischen Koordinaten arbeitet und bei einem zufälligem X plus einem zufälligem Y nun mal immer ein Quadrat oder Rechteck heraus kommt. Man merkt das natürlich nicht gleich, aber wir spielen ja alle Arma weil es so super realistisch ist. Daher wäre es ja ärgerlich wenn die geskriptete Artillerie eine unnatürliche quadratische Streuung aufweist... Nicht wahr?!?
Weil man das Rad nicht jedes mal neu erfinden möchte, hier eine "Formelsammlung":

Von links nach rechts:
zufälliger Radius -- zufällige Position im Kreis -- Gaußsche Normalverteilung
Links ist, was passiert, wenn man der
Das ist bei der Mitte behoben, indem die
Bei Rechts wird die Syntax für die Gaußsche Normalverteilung von
Da man seine Spieler aber normalerweise nicht sofort wegbomben möchte, sondern eher für Kriegsambiente sorgen möchte, kann man stattdessen eine Position um die Spieler herum beschießen.

Von links nach rechts:
Invertierte Normalverteilung, zufälliger Radius -- Invertierte Normalverteilung, zufällige Position -- zufällige Position im Ring
Links ist die Normalverteilung einfach invertiert ("1 minus Zufallszahl"). Damit ist ein Treffer am Rand am wahrscheinlichsten.
Mitte kombiniert die Normalverteilung mit dem Wachsen der Fläche mit dem Radius im Quadrat. Das macht einen Treffer in der Mitte noch unwahrscheinlicher.
Mit Rechts geht man auf Nummer sicher und erzeugt eine komplett zufällige Position in einem Ring. Das wird wiederum durch das Ziehen der Quadratwurzel erreicht. Da hier nicht mit [0,1] sondern mit den absoluten Zahlen gearbeitet wird, werden diese vorher quadriert. Das Zentrum bleibt dabei unberührt.
Weil man das Rad nicht jedes mal neu erfinden möchte, hier eine "Formelsammlung":

Von links nach rechts:
zufälliger Radius -- zufällige Position im Kreis -- Gaußsche Normalverteilung
Links ist, was passiert, wenn man der
getPos
-Funktion einen zufälligen Radius und einen zufälligen Winkel gibt. Da der Abstand zweier Strahlen aus einem Zentrum zueinander immer weiter anwächst, bzw. die Fläche eines Kreises mit dessen Radius im Quadrat wächst, ergibt diese einfachste Formel eine Verteilung mit Tendenz zu einer Position im Zentrum.Das ist bei der Mitte behoben, indem die
random
-Funktion unter eine Quadratwurzel gezogen wurde. Eine kleine zufällige Zahl unter 1 wird nach dem Ziehen der Quadratwurzel Richtung der 1, bzw. der Außenseite vergrößert. Das Ergebnis ist eine perfekte Verteilung im Kreis.Bei Rechts wird die Syntax für die Gaußsche Normalverteilung von
random
für den Radius verwendet. Das ergibt dann ein realistisches Trefferbild, so wie man es "in der Natur" erwarten würde.Da man seine Spieler aber normalerweise nicht sofort wegbomben möchte, sondern eher für Kriegsambiente sorgen möchte, kann man stattdessen eine Position um die Spieler herum beschießen.

Von links nach rechts:
Invertierte Normalverteilung, zufälliger Radius -- Invertierte Normalverteilung, zufällige Position -- zufällige Position im Ring
Links ist die Normalverteilung einfach invertiert ("1 minus Zufallszahl"). Damit ist ein Treffer am Rand am wahrscheinlichsten.
Mitte kombiniert die Normalverteilung mit dem Wachsen der Fläche mit dem Radius im Quadrat. Das macht einen Treffer in der Mitte noch unwahrscheinlicher.
Mit Rechts geht man auf Nummer sicher und erzeugt eine komplett zufällige Position in einem Ring. Das wird wiederum durch das Ziehen der Quadratwurzel erreicht. Da hier nicht mit [0,1] sondern mit den absoluten Zahlen gearbeitet wird, werden diese vorher quadriert. Das Zentrum bleibt dabei unberührt.
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von commy2 ()