Mitspieler Online

· Gäste: 32

· Mitspieler Online: 0

Login

Benutzername

Passwort



Passwort vergessen?
Um ein neues Passwort anzufordern klicke hier.

Ereignisse

<< Mai 2024 >>
Mo Di Mi Do Fr Sa So
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Social

Thema ansehen

 Thema drucken
Punkt im Rechteck?
05.02.2015 um 14:07

Top  #1  Beitrag drucken

Anonymer Benutzer

Anonymer Benutzer
Laborratte

Eine ArmA-3 Modifikation für Gruppe W erstellt

Forenprofi


Beiträge: 1694

Registriert am: 20.01.13

Moin!
Ich habe ein Problem. Und gebe euch jetzt dein einmalige Gelegenheit, euch bei der Lösung des Problems einzubringen und dadurch zu profilieren.

Was ist meine Situation?
Gegeben sein ein Rechteck ABCE. Dieses Rechteck wird beschrieben von einem Rechteck-Ursprung A und zwei Vektoren AB und AC. Ein Punkt liegt im Rechteck, gdw. es eine Vektoraddition A+c*AB+d*AC gibt, mit c und d Element aus dem Intervall [0;1].
Über dieses Verfahren lässt sich sehr leicht ein beliebiger Punkt in dem Rechteck konstruieren.

Was ist mein Problem? (I)
Gegeben sei nun ein Punkt TARGET, wie kann ich algorithmisch bestimmen, ob dieser Punkt im Rechteck liegt?

Was ist mein Problem? (II)
Angenommen, TARGET sei außerhalb des Rechtecks ABCE. Dann soll nun folgender Punkt D gefunden werden:
Gegeben sei ein weiterer Punkt POS innerhalb des Rechtecks. Der Schnittpunkt der Verbindungsstrecke von POS und TARGET mit der Rechtecks-"grenze" sei D.

Wie kann man das nun herausfinden?

Ich habe schon ein paar Ideen, aber nichts, was mich wirklich weiter bringt. Wichtig ist natürlich, dass die Lösungsansätze algorithmisch umsetzbar sind.
Aber auch Lösungsansätze sind natürlich gerne gesehen.

Ich weiß, man könnt das relativ einfach mit Geradengleichungen lösen, ich würde das aber gerne anders lösen.

Hier habt ihr noch mal eine Grafik dazu:
[img]https://dl.dropboxusercontent.com/u/63428639/Bilder/nofollow.png[/img] is not a valid Image.

Greetz,
Fettboy
05.02.2015 um 14:23

Top  #2  Beitrag drucken

Soldia

Benutzeravatar
Forenprofi


Beiträge: 1463

Registriert am: 07.04.13

Transformation des gesamten Systems in ein rechtwinkliges KOS (simple Drehmatrix), welches sich an AC(->y-Achse) und AB(-> x-Achse) orientiert mit anschließendem Check, ob beide Koordinaten von TARGET innerhalb des gegebenen Intervalls [0,1] liegen? Falls nicht -> außerhalb

Bestimmung von D -> Du weißt, dass in deinem neuen KOS der Punkt D immer y = 1 gilt. N bisschen interpolieren und du hast auch die andere Koordinate.


Sollte immer der gleiche Ablauf sein.
forum.gruppe-w.de/pics/Foren_Signaturen/Soldia.png
ACRE2 Issues
05.02.2015 um 14:29

Top  #3  Beitrag drucken

Anonymer Benutzer

Anonymer Benutzer
Laborratte

Eine ArmA-3 Modifikation für Gruppe W erstellt

Forenprofi


Beiträge: 1694

Registriert am: 20.01.13

Das mit der Transformation habe ich mir auch überlegt, aber da diese Berechnung insgesamt sehr, sehr oft passieren wird, hielt ich das für zu heftig.

Aber wenn man das bei der Initialisierung macht, sollte das möglich sein.
05.02.2015 um 14:31

Top  #4  Beitrag drucken

Soldia

Benutzeravatar
Forenprofi


Beiträge: 1463

Registriert am: 07.04.13

Naja, das ist eine 2 dimensionale Drehmatrix. Das sollte eigentlich recht schnell gehen.

Aber ich hab von der Umsetzung in was-auch-immer keine Ahnung Grin
forum.gruppe-w.de/pics/Foren_Signaturen/Soldia.png
ACRE2 Issues
05.02.2015 um 14:32

Top  #5  Beitrag drucken

Anonymer Benutzer

Anonymer Benutzer
Laborratte

Eine ArmA-3 Modifikation für Gruppe W erstellt

Forenprofi


Beiträge: 1694

Registriert am: 20.01.13

.sqf
05.02.2015 um 14:46

Top  #6  Beitrag drucken

Soldia

Benutzeravatar
Forenprofi


Beiträge: 1463

Registriert am: 07.04.13

Achso, der Shit ist für Arma?
Naja, 20 Zeilen Code für die Drehmatrix...
Kann dir meine Funktion dafür geben.

->

_vector1 = _this select 0;
_alpha = _this select 1;

_x1 = _vector1 select 0;
_y1 = _vector1 select 1;
_z1 = _vector1 select 2;

_x2 = (_x1 * (cos _alpha)) + (_y1 *  (sin _alpha));
_y2 = (_x1 * (-1) * (sin _alpha)) + (_y1 * (cos _alpha));
_z2 = _z1;

_vector2 = [];
_vector2 set [0,_x2];
_vector2 set [1,_y2];
_vector2 set [2,_z2];

_vector2

forum.gruppe-w.de/pics/Foren_Signaturen/Soldia.png
ACRE2 Issues
05.02.2015 um 14:59

Top  #7  Beitrag drucken

Soldia

Benutzeravatar
Forenprofi


Beiträge: 1463

Registriert am: 07.04.13

Ich weiß ja nicht ganz genau, was du machen möchtest, Li...

Aber für (I) könntest du auch einfach n Trigger erstellen mit den Daten, die du hast. Und dann guckste, ob TARGET in der Triggerarea ist.
forum.gruppe-w.de/pics/Foren_Signaturen/Soldia.png
ACRE2 Issues
05.02.2015 um 16:49

Top  #8  Beitrag drucken

Soldia

Benutzeravatar
Forenprofi


Beiträge: 1463

Registriert am: 07.04.13

Naja, die oben genannte Drehmatrix benötigt 0,02ms... kannste also locker perFrame ausführen, wenn du willst.
forum.gruppe-w.de/pics/Foren_Signaturen/Soldia.png
ACRE2 Issues
05.02.2015 um 22:57

Top  #9  Beitrag drucken

Benutzeravatar
frisch dabei


Beiträge:

Registriert am: 01.01.70

Problem 1:

Entfernung zu allen 4 Eckpunkten bestimmen, wenn Entfernungen kleiner als Diagonale dann innerhalb des Rechtecks (lässt sich mit ArmA built-in Funktionen schnell ausführen). Ist sehr wahrscheinlich noch effizienter lösbar, kleinere Entfernungen als Diagonale oder nur 3 statt 4 Eckpunkte betrachten etc. aber da mach ich mir jetzt keinen Kopf zu.

Problem 2:

Lässt sich vermutlich ähnlich lösen. Erstmal bestimmen welche Rechteckkante relevant ist (auch wieder mit Entfernungen zu Eckpunkten bestimmen). Gibt aber hässliche Ausnahmefälle in denen Pos eng im Schatten anderer Ecken liegt wodurch evtl. der Schnitt gerade so wo anders sein kann als auf der so bestimmten Kante. Das lässt sich umgehen wenn man auch miteinfließen lässt zu welchen Ecken Pos nahe is.

Alles weitere ist Schnittpunkt zweier Geraden was sich relativ effizient und einfach mit Gaußschem Eliminationsverfahren, O(n*m), lösen lässt. Klingt komplex is aber in der Anwendung easy weil unsere Matrix hier 3 Spalten hat und 2-3 Zeilen (je nach gewünschter Dimensionalität des Rechtecks (ich vermute mal hier ist 2-dim gewünscht)). Naja also eine 2x3 Matrix und das geht ja wunderbar flott zu lösen.
Eventuell, aber ich weiss nich ob, könnte man auch drüber nachdenken die Geschichte in C auszulagern aber ich weiss nicht wie groß der Overhead hier ist und das lösen von 2x3 mit Gauß is wirklich keine Welt.

Eventuell lässt sich der Schnittpunkt auch noch approxmiert statt exakt berechnen aber da fällt mir grad nix ein.
Springe ins Forum:
Seitenaufbau in 1.17 Sekunden
Serverzeit: 08:40:23 Uhr , 55,168,608 eindeutige Besuche