Mathe-Problem // Vektorkollision (GELÖST!)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Ava

Gast

Betreff: Mathe-Problem // Vektorkollision (GELÖST!)

BeitragSa, Sep 24, 2005 22:00
Antworten mit Zitat
Mathe-Problem

Beschreibung:
- die rote Linie ist ein Hinderniss, dass ich auf Kollision teste
- mit der blauen Linie teste ich auf Kollision (und zwar: von Punkt_1 zu Punkt_2)

Problem:
- ich muss ermitteln, von welcher Seite das Hinderniss getroffen wurde (Seite_1 oder Seite_2)

Bemerkung:
- in der Praxis sind die Positionen nur selten rechtwinklig, ich benötige
daher eine Method, dies für alle denkbaren Positionen und Winkeln
berechnen zu können
- die blass-blauen Kollisionslinien sollen dies nur verdeutlichen

user posted image

Ich habe zu Anfang geglaubt, dies liesse sich relativ einfach berechnen.
Meine erste Überlegung war, den Tangenswinkel zwischen Punkt_1 und
dem Kollisionspunkt zu berechnen, mit dem Winkel der Hindernislinie zu
vergleichen und dann irgendwie anhand eines bestimmten Wertebereichs
die getroffene Seite zu ermitteln.

Es schien anfangs zu funktionieren. Doch dann fiel mir auf, dass in
manchen (weniger häufigen) Situationen die falsche Seite ermittelt wurde. Sad

Hat jemand eine Idee und/oder Formel parat, wie ich die Seite 100% verlässlich
ermitteln kann?? - wäre absolut hilfreich! Very Happy


Gruss, Ava



[/EDIT]
Ich habe mal ein Beispiel-Programm hochgeladen, um das Problem noch
etwas besser zu verdeutlichen.

BEISPIEL (840 kb)

In diesem Beispiel seht ihr, dass jede Hindernislinie zwei unterschiedliche
Seitemakierungen besitzt: jeweils eine grüne und eine rote.

Ich weis, ich wiederhole mich, wenn ich nun sage: es ist wichtig für mich,
zu wissen, welche Seite "getroffen" wurde! Aber ich erwähne es trotzdem
nochmal. Smile *g*
  • Zuletzt bearbeitet von Ava am So, Sep 25, 2005 1:30, insgesamt 2-mal bearbeitet
 

CodeMaster

BeitragSa, Sep 24, 2005 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab zwar nicht ganz verstanden, was genau du willst, aber vielleicht hilft dir der Beispielcode von hier weiter...

[edit]
Ich glaub, das war's nicht so ganz.
Dies ist ein Text, der an jeden Beitrag von dir angehängt werden kann. Es besteht eine Limit von 500 Buchstaben.

Zuletzt bearbeitet von CodeMaster am Mo Apr 01, Parse error: syntax error, unexpected ';' in htdocs\viewtopic.php on line 102
 

Ava

Gast

BeitragSa, Sep 24, 2005 22:25
Antworten mit Zitat
Ne, das war es nicht ... *lächel*

Aber dennoch sehr interessant, womöglich kann mir das auch noch
hilfreich sein, also trotzdem danke dafür! Smile


[/edit]


Um es nochmal zu verdeutlichen:
Ich benötige keine Formel, um die Kollisionen zu berechnen.
Soweit habe ich das alles schon alleine hinbekommen! Smile

Es geht nur darum, zu ermitteln, auf welcher Seite der Hindernislinie die
kollision erfolgt ist. Auf meiner Skizze dort oben wäre dies zum Beispiel
die Seite_1 gewesen.

Der Grund dafür könnte zum Beispiel sein, dass eine Linie von der einen Seite aus passierbar
ist und von der anderen Seite nicht. Dazu müsste ich das dann wissen. Wink

darth

Betreff: ..

BeitragSa, Sep 24, 2005 23:33
Antworten mit Zitat
Benutzer-Profile anzeigen
hast dus schon mal mit dem skalarprodukt probiert?
(ohne nachzurechnen... reiner schuss ins blaue)

skalarprodukt:
cos^-1(avektor*bvektor/|avektor|*|bvektor|)
heisstsoviel wie: wenn man den arcuscosinus von vektor*vektor durch ihre längen nimmt, erhält man einen winkel
also:
cos^-1((x1*x2+y1*y2)/(sqr(x1^2+y1^2)*sqr(x2^2+y2^2)))

jetz kommt meine vermutung - also alles nicht rechnerisch bestätigt:
wenn der erhaltene winkel grösser als 90 ist, dann kommt es von der unteren seite, ist der winkel kleiner als 90 von oben...
sollte eigentlich so sein, da die winkel immer im uhrzeigersinn angegeben werden, also vom blauen vektor weg zum roten vektor hin... (oder von rot zu blau? dann wärs genau umgekehrt...)

müsstest du halt mal ausprobieren...
hoffe es nützt
cya
Diese Signatur ist leer.
 

Ava

Gast

BeitragSa, Sep 24, 2005 23:46
Antworten mit Zitat
Ich werde das einfach mal ausprobieren, danke! Smile

Einziges Problem was ich da grad habe, ich verstehe Dein cos^-1,
kannst Du mir das vielleicht nochmal erklären? ich vermisse da irgendwie
den Winkel-Parameter der Cos-Funktion. Rolling Eyes

Ich google mal nach Skalarprodukt, vielleicht hilft mir das ja schon weiter.

darth

Betreff: ..

BeitragSa, Sep 24, 2005 23:52
Antworten mit Zitat
Benutzer-Profile anzeigen
cos^-1 ist arcuscosinus... wusste nicht grad wie die heisst in bb
nehme mal an es ist ACOS

ja... OH: Winkel#=ACOS# (Zahl#)
Diese Signatur ist leer.
 

Ava

Gast

BeitragSo, Sep 25, 2005 0:13
Antworten mit Zitat
Zitat:
In der Mathematik und vielen ihrer Anwendungsbereiche versteht man unter dem Skalarprodukt oder inneren Produkt zweier Vektoren eine Zahl, welche Informationen über die Längen und die relative Lage der Vektoren zueinander liefert: Zwei Vektoren stehen genau dann senkrecht aufeinander, wenn ihr Skalarprodukt Null ist; zeigen sie hingegen in dieselbe Richtung, so ist das Skalarprodukt das (gewöhnliche) Produkt ihrer Längen.


Das klingt ja schonmal sehr vielversprechend! Smile
Muss ich morgen mal schauen, ob ich diese Theorie auch irgendwie praktisch
umgesetzt bekomme. Heute kann ich nicht mehr klar genug denken. *g*

Ich habe aber ein sehr gutes Gefühl bei Deinem Tipp.
Hoffentlich klappt das! Smile


[/EDIT]


DANKE DANKE DANKE, funktioniert bestens! Very Happy
Und Acos() ist nicht einmal notwendig, das Produkt allein recht schon aus!
(Produkt > 0 oder < 0 verrät mir die jeweilige Seite Smile)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group