Ich schon wieder....
...vielleicht bekomme ich diesmal eine Lösung für mein Problem, ohne dass mein Thema gleich mal gesperrt wird, obwohl ich meiner Meinung nach niemanden persönlich beleidigt oder angegriffen habe, sondern nur meine Unfähigkeit deutlicher zum Ausdruck bringen wollte... aber gut.
Wenn sich jemand hier böse von mir angesprochen gefühlt hat, so möchte ich mich bei demjenigen dafür entschuldigen.
Doch nun zum eigentlichen Problem:
|
Quellcode
|
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
|
bool LineHitsLine(const Vector2D& p,
const Vector2D& u,
const Vector2D& q,
const Vector2D& v,
Vector2D* const pHit = 0)
{
// Die Determinante D berechnen
const float D = u.y * v.x - u.x * v.y;
// Wenn D null ist, sind die Linien parallel.
if(D < 0.0001f && D > -0.0001f) return false;
// Determinante Ds berechnen
const float Ds = (q.y - p.y) * v.x - (q.x - p.x) * v.y;
// s = Ds / D berechnen und prüfen, ob s in den Grenzen liegt
const float s = Ds / D;
if(s < 0.0f || s > 1.0f) return false;
// Jetzt berechnen wir Dt und t.
const float Dt = (q.y - p.y) * u.x - (q.x - p.x) * u.y;
const float t = Dt / D;
if(t < 0.0f || t > 1.0f) return false;
// Die Linien schneiden sich!
// Wir tragen den Schnittpunkt ein.
if(pHit) *pHit = p + s * u;
return true;
}
|
Füttert man diese Funktion mit den Vektoren:
p( 100, 50 ) -> u( 100, 150 )
q( 50, 100 ) -> v( 150, 100 )
so ergibt sich für
s oder
t = 1, obwohl sich die Vektoren in ihrer Mitte schneiden und damit 0.5 rauskommen sollte.
Ein Schnittpunkt befindet sich dann bei v(200,200), was ja damit auch völlig daneben liegt, weil der bei v(100,100) sein sollte.
Fragt mich nicht, warum welche Formel an welcher Stelle wie zum Einsatz kommt, das Ding ist aus dem Tutorial kopiert.
PS: Nochmals: Entschuldigung, wenn ich jemanden mit meinem ersten Thread auf die Füsse getreten bin.