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

AvaGastBetreff: Mathe-Problem // Vektorkollision (GELÖST!) |
![]() 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 ![]() 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. ![]() Hat jemand eine Idee und/oder Formel parat, wie ich die Seite 100% verlässlich ermitteln kann?? - wäre absolut hilfreich! ![]() 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. ![]() |
||
- Zuletzt bearbeitet von Ava am So, Sep 25, 2005 1:30, insgesamt 2-mal bearbeitet
CodeMaster |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
AvaGast |
![]() 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! ![]() [/edit] Um es nochmal zu verdeutlichen: Ich benötige keine Formel, um die Kollisionen zu berechnen. Soweit habe ich das alles schon alleine hinbekommen! ![]() 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. ![]() |
||
![]() |
darthBetreff: .. |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Ich werde das einfach mal ausprobieren, danke! ![]() 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. ![]() Ich google mal nach Skalarprodukt, vielleicht hilft mir das ja schon weiter. |
||
![]() |
darthBetreff: .. |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
AvaGast |
![]() 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! ![]() 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! ![]() [/EDIT] DANKE DANKE DANKE, funktioniert bestens! ![]() Und Acos() ist nicht einmal notwendig, das Produkt allein recht schon aus! (Produkt > 0 oder < 0 verrät mir die jeweilige Seite ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group