Kreisberechnung und Radiusvergrößerung: Wie ???????

Hier ist der ideale Ort um über Scripts und Mods für X³: Reunion zu diskutieren.

Moderators: Moderatoren für Deutsches X-Forum, Scripting / Modding Moderators

User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Kreisberechnung und Radiusvergrößerung: Wie ???????

Post by SuperVegeta »

weiß jemand wie man einen Kreis berechnet in X3
um in umkreis eines objects einen kreis aus anderen objects zu erstellen
und dann den radius des kreises nach und nach vergrößern :?: :?: :?:


der radius und die kreis.object.points stehen noch nicht fest.


kann mir jemand helfen :?:
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

dafür braucht man die Sinus - und Cosinusfunktion.

ich schreib schnell was entsprechendes.
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

Ein Beispiel:

Code: Select all

001   $xm = [PLAYERSHIP] -> get x position
002   $ym = [PLAYERSHIP] -> get y position
003   $zm = [PLAYERSHIP] -> get z position
004   $sektor = [PLAYERSHIP] -> get sector
005   $a = 0
006   $r = 1000
007   $sw = 2048
008   while $a < 65536
009    $xo =  = fixed sin $a
010    $x = $xm + $xo * $r / 65536
011    $yo =  = fixed cos $a
012    $y = $ym + $yo * $r / 65536
013    $a = $a + $sw
014    $none =  create ship: type=Erweiterter Satellit owner=Player addto=$sektor x=$x y=$y z=$zm
015   end
016   return null
MfG Mike
User avatar
-Ford-
Posts: 2064
Joined: Wed, 18. Jan 06, 18:40
x4

Post by -Ford- »

Was sind überhaupt Sinus und Cosinus Funktionen :? Hatten wir noch nicht in der Schule :?

Lt. Ford
Ponyfabulous
UniTrader
Moderator (Script&Mod)
Moderator (Script&Mod)
Posts: 14571
Joined: Sun, 20. Nov 05, 22:45
x4

Post by UniTrader »

Einfach mal sinus bei wikipedia eingeben, aber dieses bild sollte es ausreichend veranschaulichen:

[ external image ]
if not stated otherwise everything i post is licensed under WTFPL

Ich mache keine S&M-Auftragsarbeiten, aber wenn es fragen gibt wie man etwas umsetzen kann helfe ich gerne weiter ;)

I wont do Script&Mod Request work, but if there are questions how to do something i will GLaDly help ;)
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

Dank euch :roll:

@msh == Mike

könnst das bitte erklären wie das zustande kommt
damit ich nich nur abschreib sondern verstehen kann

ich versteh nämlich nich alles

also PLAYERSHIP get ist klar das ist die mitte :!:

könntest du zeile 005--013 mal etwas genauer erklären :?: :?: :?:
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

OK, die Erklärung dauert aber noch ein wenig. Ich bin hier gerade in der FH u. die Zeit reicht nicht mehr ganz bis zum "Feierabend".

MfG Mike
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

Nochmal @SuperVegeta :)


Hallo, da bin ich wieder!


Also hier mal eine Kurzerklärung zum Script:


Variablendefinition:

$a - der in der späteren Schleife verwendete Zähler (Zeile 5 setzt sozusagen nur einen definierten Grundzustand)
$r - der Radius (create ship arbeitet mit Metern - in dem Fall also 1km Abstand zu Playership-Mittelpunkt)
$sw - die Schrittweite (willst Du 16 Objekte aussetzen also 65536/16 == 4096 -> bei mir müßten es demzufolge 32 sein)

Zeile 008 - die erste Zeile der eigentlichen Schleife (führe aus, solange kleiner Vergleichswert)
Zeile 013 - hier wird der Schleifenzähler mit der vorgegebenen Schrittweite erhöht
Zeile 015 - das Ende der Schleife

Zeile 014 - Zur Demonstration habe ich eSat's gewählt und erzeugt


weitere Erklärung:

Die Winkelfunktionen (sin/cos) liefern normalerweise Werte im Bereich von -1...0...1.

Da in einem Integer/Quad nur ganze Zahlen gespeichert werden können, hat sich Ego entschieden die Werte mit 65536 zu Multiplizieren, der Wertebereich ist also -65536...0...65536 (o. auch 65535 - ich mußte es auch erst ertesten also bitte nicht auf dem Wert festnageln :)) - deshalb auch die Division durch 65536 in den Zeilen 010/012 - normalerweise braucht man die nicht.

Jetzt kommt etwas was ich Ego etwas übel nehme, die Winkelfunktionen (u. auch Winkelberechnungen) arbeiten üblicherweise mit Altgrad (360° == eine komplette Schwingung), Neugrad (400° == eine komplette Schwingung) o. Bogenmaß (2*Pi == eine komplette Schwingung).
Aus einem mir nicht wirklich ersichtlichen Grund (vermutlich interner 16bit-Überlauf zur Werterückführung in die erste Amplitude genutzt) wurde in X3 2^16 Schritte gewählt, es ist somit kein sinnvolles Vielfaches irgendeiner Maßgrundlage u. erfordert immer eine (unübersichtliche) Umrechnung - willst Du praktisch Punkte in 10° Abständen erhalten, mußt Du 65536/360°*10° rechnen).

In den Zeilen 009/011 werden die sin/cos Werte ermittelt u. in den Offset-Variablen abgelegt (der cos ist eigentlich nur ein um 1/4 Wellenlänge verschobener sin -> in X3 also cos(x) == sin(x+16384)

die Zeilen 010/012 machen die eigentliche Berechnung, Bsp. x-Koordinate:

X-Koordinate = x-Mittelpunkt + x-Offset * Radius / 65536 (der letzte Wert ergibt sich um den gelieferten Wert wieder auf den normalen Wertebereich zurückzuführen, unbeding erst "*" dann "/" sonst geht Dir der Nachkommateil verloren).

MfG Mike
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

uuuuuuuuuuiiiiiiiiiiii

na dasw kann was werden :gruebel:

malsehen ob ich das hinkrieg und wie lang das dauert :?:
das muß ich erstmal ausprobieren

thanx msh
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

Das ist nicht so schlimm wie es aussieht, der Script ist so wie Du ihn hier siehst in X3 lauffähig u. erzeugt einen Ring aus eSat's um das Spielerschiff.
Wenn Du möchtest, kann ich ihn auch zum Download bereitstellen.

MfG Mike

Edit:

Ich war so frei in hochzuladen (erspart Dir also die Funktionsjagd im Scripteditor :)).
Hier der Link (rechte Maustaste - "speichern unter" verwenden, sonst versucht der Browser die Datei zu öffnen u. wird dabei scheitern)
User avatar
-Ford-
Posts: 2064
Joined: Wed, 18. Jan 06, 18:40
x4

Post by -Ford- »

Werden die ESats jetzt in 1km Radius ausgestzt? Und wenn ich einen größeren haben will muss ich einfach nur $r verändern?

Lt. Ford
Ponyfabulous
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@Lt. Ford [IBAP]

Richtig erkannt, den Korrekturfaktor so lassen wie er ist u. nur $r erhöhen.

$r == 1000 -> ca. 1km Abstand zum Spielerschiff
$r == 2000 -> ca. 2km Abstand zum Spielerschiff
.
.
.


MfG Mike
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

aber wenn ich den Radius erhöhe, werden den dan die abstände zwischen den sat's nicht größer :?:
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

Ja, sie werden dann größer, da sie mit einem bestimmten Winkel (die Schrittweite) um das Spielerschiff verteilt werden.
Verdoppelt man den Radius verdoppeln sich auch die Abstände.

MfG Mike
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

kann man das irgendwie einstellen das die Sat's dann mehr werden so das der Abstand zwischen den Sat's gleich bleibt :?:
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

Ja, indem man die Schrittweite anpasst (Zeile 007).

007 $sw = 65536 / ( $r * 2 * 31416 / 10000 / $abs )

Der Ausdruck "* 31416 / 10000" steht für Pi.
Ein wenig optimiert u. ein wenig Rundung:

007 $sw = 10430 * $abs / $r

Also nur die Zeile 007 durch den letzten Ausdruck ersetzen u. davor noch die Variable $abs mit dem gewünschten Abstand (in Metern) einstellen.
Durch die Rundung weicht aber der letzte Abstand deutlich ab.

MfG Mike
User avatar
SuperVegeta
Posts: 1611
Joined: Tue, 20. Dec 05, 11:13
x3tc

Post by SuperVegeta »

meinst du mit dem: der letzte weicht ab == das die Dist beim ersten Sat und dem letzten Sat, wenn der Kreis geschlossen wird nicht ganz passt :?:


ich dank dir schon mal für deine hilfe :roll:

mfg
Oli
msh
Posts: 639
Joined: Tue, 13. Apr 04, 00:50
x3

Post by msh »

@SuperVegeta

Genau das, der Abstand ist in der jetzigen Version oft kleiner.

MfG Mike

Return to “X³: Reunion - Scripts und Modding”