[INFO/LIB] Objekte in einem Konus erfassen / Get FPS

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

Post Reply
User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

[INFO/LIB] Objekte in einem Konus erfassen / Get FPS

Post by Gazz » Wed, 23. Apr 08, 19:32

(Get FPS: siehe unten)


Ich wollte eine Methode finden um Objekte in einem 90° Winkel vor dem Schiff zu erfassen.
Das aber sauber und nicht als Annäherung mit 10 Find-Kugeln, deren Ergebnisse ich dann alle auswerten muß.

Das Ergebnis: 1 einmaliger library call und pro Objekt 3 Instruktionen als Filter.
Das soll alles sein? Ist es.

Als Basis braucht man 2 Punkte.

In meinem Fall war das
1. das Schiff und
2. ein Punkt 5000m hinter dem Schiff.
(leicht zu finden mit UniTraders lib.ut.pos.from.2.grades.and.rad)

Sieht dann in etwa so aus:
00 ObjArray = Find blah
01 Point = Punkt behind ship 5000
02
03 index = size of array
04 Filter:
05 While index
06 dec index
07 Obj = ObjArray (index)
08 Dist.Ship = distance between Ship and Obj
09 Dist.Point = distance between Point and Obj
10 skip if not Dist.Ship + 4700 > Dist.Point
11 remove element from array ObjArray at index index
12 end


Mit der Zahl 4700 wird der Winkel eingestellt.
Hier einige Beispielwerte. Die Liste ist weiter unten.
4860 : 30°
4710 : 45°
4630 : 50°
4380 : 65°
4300 : 80°
3860 : 90°
2520 : 135°


Auf die Weise kann ich mit nur 3 Befehlen (Zeilen 5-7) feststellen, ob das Objekt in dem Konus ist oder nicht.
Eine immense Einsparung gegenüber dem Ansatz, für jedes einzelne Objekt die komplette Trigonometrie durchzuackern.

Wer nur die eine Formel umstellt, kann berechnen wieviel Grad ein Objekt außerhalb der Flugrichtung des Schiffs ist...

[ external image ][ external image ] . . . selbe Funktion, andere Auflösung.
Bei großen Entfernungen (005 - 600 km) sieht das aus wie ein perfekter Konus aber eine Betrachtung des Nulldurchgangs zeigt schnell, daß es eine Parabel ist.
Mit dem "4700" Winkel liegt der Nullpunkt 145 m hinter dem Schiff.

Für höhere Genauigkeit kann man die 2 Referenzpunkte verschieben aber im Nahbereich wird die Methode nie perfekt sein.
Wer eine bessere Lösung hat (die in einem Script immer noch berechenbar ist) darf mich gerne korrigieren.

Für Navigations- und Kampfscripts kann ich mir schon einige Anwendungen vorstellen.
Schließlich kann man ja einen Konus vor, einen anderen hinter dem Schiff oder alle Objekte, die in keinem von beiden enthalten sind herausfiltern.

Für das gute alte N.O.S. wäre sowas z.B. nett. So kann ich recht schnell feststellen ob auf meinem Kurs Bösewichte herumfliegen.
Last edited by Gazz on Tue, 29. Apr 08, 22:40, edited 17 times in total.
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.

DaOpa
Posts: 914
Joined: Sun, 28. Jan 07, 17:55

Post by DaOpa » Wed, 23. Apr 08, 19:42

Moin

Danke :D Ich glaube, das ich mir das zu nutze mache für mein Jägermanagement mit Lucike's find global position.

Gruß

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

Post by UniTrader » Wed, 23. Apr 08, 21:02

:o wofür das Dingens alles nützlich sein kann.. die Anwendung geht weit über den ursprünglichen zweck des Scriptes hinaus :D

Wen es interresiert hier ne kleine Versionshistory (wenn auch ohne Versionsnummern, da dafür nie so viel geplant war ^^):

Usrsprünglicher zweck der Lib war es einen Punkt in gegebener entfernung zur Ursprungskoordinate zu erhalten, um die Position von Planeten & Sonnen sauber bestimmen zu können... (daher auch der Name: Position aus 2 Winkeln und - entfernung - )

Nach ein paar experimenten konnte ich die Lib schliesslich so umbauen, dass man einfach nur den Alpha- und Beta-Winkel eines Schiffes eingeben musste, um Positionen vor / hinter dem Schiff zu erhalten (wenn dieses in der Sektormitte ist)

Um mir später die Arbeit zu vereinfachen habe ich zusätzlich noch eingebaut, dass man ne Ursprungskoordinate eingeben kann, von der aus die Position bestimmt wird.. und das war auch die Version welche ich später in der Library-Sammlung veröffentlicht habe.. :)

und nun zur heutigen Version (geschätzt 1/2 - 1 Jahr nach schreiben des Ursprünglichen Scriptes erstellt):
Diese Version hat Gazz basierend auf meiner Releasten erstellt.. in dieser kann man statt des Positionsarrays als Ursprungsposition auch ein Objekt als Ursprung angeben, von dem dann die Koordinaten genommen werden.. in diesem fall sind auch keine Winkelangaben nötig, denn wenn man diese weglässt werden sie einfach vom Objekt genommen ^^ so kann man schnell und unkompliziert Punkte vor/hinter Schiffen erhalten ^^ (wie man ne Position hinter einem Schiff erhällt müsste nach etwas überlegen jedem einfallen ^^)
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
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz » Wed, 23. Apr 08, 21:27

Deine library ist aus meinen scripts gar nicht mehr wegzudenken. Dafür ist sie viel zu flexibel und pflegeleicht. =)

Für turret scripts bräuchte man natürlich noch Gamma aber den tatsächlichen Winkel der Geschütze festzustellen und in einem script zu nutzen ist ein enormer Aufwand.
Anzunehmen daß turret 1 genau links ist wäre reine Glückssache, da man nicht wissen kann, wer was gemoddet hat.
Der Winkel muß nämlich nicht 90° zu irgendeiner Schiffsachse sein...
Das muß alles empirisch ermittelt werden wenn so ein script sauber laufen soll.

Das turret script, das ich "bei Gelegenheit" mal schreibe sollte ganz ohne Trigonometrie mit 2-3 simplen Integerberechnungen in der Lage sein, die Trefferrate deutlich zu steigern, indem es zu einem leichter zu treffenden Ziel wechselt, wenn das aktuelle ausweicht.
Das Ziel in der geringsten Entfernung ist ja nicht notwendigerweise das am leichtesten zu treffende. =)
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.

User avatar
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz » Fri, 25. Apr 08, 22:58

= get FPS

Das tut es. Nicht mehr und nicht weniger.

Timing in X3 ist fast immer FPS-abhängig also könnte das mal nützlich sein.

Für ein eigenes Topic ist das aber zu klein also werf ich es mal hier mit rein. =P


Geschrieben hab ichs um festzustellen ob der Spieler SETA benutzt. Wenn FPS in diesem Sektor plötzlich auf 1/10 fallen und er nicht in einem Kampf ist...

[ external image ]
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.

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

Post by UniTrader » Fri, 25. Apr 08, 23:03

Gazz wrote:= get FPS

Das tut es. Nicht mehr und nicht weniger.

Timing in X3 ist fast immer FPS-abhängig also könnte das mal nützlich sein.

Für ein eigenes Topic ist das aber zu klein also werf ich es mal hier mit rein. =P


Geschrieben hab ichs um festzustellen ob der Spieler SETA benutzt. Wenn FPS in diesem Sektor plötzlich auf 1/10 fallen und er nicht in einem Kampf ist...

[ external image ]
warum verlinkst du das Teil nicht einfach in der library-Sammlung?? ^^

EDIT: diese Lib kann übrigens auch für ganz andere zwecke praktisch sein, z.B. kann man so vor der ausführung einer spitzen Schleife rausfinden, ob der Spieler evtl. grad probleme mit den fps hat und diese dann wenn möglich später ausführen oder in nem modus, wo die belastung gleichmässiger ist ^^ (ich hab z.B. bei meinem aktuellen Scriptprjekt ne menge Scripte die kurz ziemlich viel leistung ziehen können, aber bei denen es egal ist wenn sie mal 10 Minuten früher/später ausgeführt werden.. ich kann also mit der Ausführung warten bis der Spieler in nem ruhigen gebiet ist ^^^)
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
Gazz
Posts: 13244
Joined: Fri, 13. Jan 06, 16:39
x4

Post by Gazz » Sat, 26. Apr 08, 00:32

UniTrader wrote:warum verlinkst du das Teil nicht einfach in der library-Sammlung?? ^^
Eigentlich nur weil mir die zu deutsch ist. Jede Menge Paragraphen...
Irgendeinen muß ich da mal übersehen haben aber ich habe nie herausgefunden, was es war.
Falls eine Schrift dort wirklich Gelb sein muß dann soll es wohl nicht sein.
Eine Schrift, die auf einem normalen weißen Hintergrund unlesbar ist werde ich garantiert nicht verwenden.

Ist aber wirklich nicht schlimm. Die libraries sind in der englischen Scriptliste direkt im ersten Post zu finden. Sehr einfach und praktisch.



Hier die Liste der Winkelzahlen:
7: 4990
10: 4980
14: 4970
16: 4960
17: 4950
19: 4940
21: 4930
23: 4920
24: 4910
26: 4900
27: 4890
28: 4880
29: 4870
30: 4860
31: 4850
32: 4840
34: 4830
35: 4820
36: 4810
37: 4800
38: 4780
39: 4770
40: 4760
41: 4750
42: 4730
43: 4720
45: 4710
46: 4690
47: 4680
48: 4660
49: 4650
50: 4630
51: 4620
52: 4600
53: 4580
54: 4570
56: 4550
57: 4530
58: 4520
59: 4500
60: 4480
61: 4460
62: 4440
63: 4420
64: 4400
65: 4380
67: 4360
68: 4340
69: 4320
70: 4300
71: 4280
72: 4250
73: 4230
74: 4210
75: 4190
76: 4160
78: 4140
79: 4120
80: 4090
81: 4070
82: 4040
83: 4020
84: 3990
85: 3970
86: 3940
87: 3920
89: 3890
90: 3860
91: 3830
92: 3810
93: 3780
94: 3750
95: 3720
96: 3690
97: 3670
98: 3640
100: 3610
101: 3580
102: 3550
103: 3520
104: 3490
105: 3460
106: 3430
107: 3390
108: 3360
109: 3330
110: 3300
112: 3260
113: 3230
114: 3200
115: 3170
116: 3130
117: 3100
118: 3060
119: 3030
120: 3000
121: 2960
123: 2920
124: 2890
125: 2850
126: 2820
127: 2780
128: 2750
129: 2710
130: 2670
131: 2640
132: 2600
134: 2560
135: 2520
136: 2480
137: 2450
138: 2410
139: 2370
140: 2330
141: 2290
142: 2250
143: 2210
145: 2170
146: 2130
147: 2090
148: 2050
149: 2010
150: 1970
151: 1930
152: 1890
153: 1850
154: 1800
156: 1760
157: 1720
158: 1680
159: 1640
160: 1590
161: 1550
162: 1510
163: 1460
164: 1420
165: 1380
167: 1330
168: 1290
169: 1250
170: 1200
171: 1160
172: 1110
173: 1070
174: 1020
175: 980
176: 930
178: 890
179: 840
180: 800
181: 750
182: 710
183: 660
184: 620
185: 570
186: 520
187: 480
189: 430
190: 390
191: 340
192: 290
193: 250
194: 200
195: 150
196: 100
My complete script download page. . . . . . I AM THE LAW!
There is no sense crying over every mistake. You just keep on trying till you run out of cake.

Post Reply

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