025
15.12.2004, 00:21 Uhr
~redspider
Gast
|
ist zwar schon n bissl her, dass das hier geschrieben wurd, aber ich hab mich auch mit dem problem beschäftigt und hab selbst eine lösung entwickelt, da die von windalf (bei mir zumindest) nicht funktioniert hat. hier ist sie:
C++: |
bool Intersection(CVec2f p1, CVec2f p2, CVec2f p3, CVec2f p4, CVec2f *sp = NULL); struct CVec2f { float x,y; }; bool Intersection(CVec2f p1, CVec2f p2, CVec2f p3, CVec2f p4, CVec2f *sp) { CVec2f a,RVa; CVec2f b,RVb; a = p1; RVa = (p2-p1); b = p3; RVb = (p4-p3); // a+r*RV = b+s*RV => float denom = (RVa.y*RVb.x - RVa.x*RVb.y); if( denom == 0 ) return false; float r = (a.x*RVb.y - a.y*RVb.x - b.x*RVb.y + b.y*RVb.x)/denom; float s = (a.x*RVa.y - a.y*RVa.x - b.x*RVa.y + b.y*RVa.x)/denom;
if( r >= 0 && r <= 1 && s >= 0 && s <= 1) { if(sp != NULL) { sp->x = a.x+r*RVa.x; sp->y = a.y+r*RVa.y; } return true; } return false; }
|
diese liefert zusätzlich noch den schnittpunkt. vielleicht hilfts ja jemandem, der genauso auf der suche ist, wie ich es war. |