Frankiezafe (Talk | contribs) |
Frankiezafe (Talk | contribs) |
||
| Line 19: | Line 19: | ||
} else { | } else { | ||
float t = (e*d - b*f)/denom; | float t = (e*d - b*f)/denom; | ||
| − | return new vec2f( a1.x + t * ( a2.x - a1.x ), a1.y + t * ( a2.y - a1.y ) ); | + | float s = (a*f - e*c)/denom; |
| + | if ( t >= 0 && t <= 1 && s >= 0 && s<=1 ) { | ||
| + | return new vec2f( a1.x + t * ( a2.x - a1.x ), a1.y + t * ( a2.y - a1.y ) ); | ||
| + | } | ||
| + | return 0; | ||
} | } | ||
} | } | ||
This page contains snippets of useful math methods already turned into pseudo-code.
vec2f intersetion( vec2f a1, vec2f a2, vec2f b1, vec2f b2 ) {
float a = a2.x - a1.x;
float b = b1.x - b2.x;
float c = a2.y - a1.y;
float d = b1.y - b2.y;
float e = b1.x - a1.x;
float f = b1.y - a1.y;
float denom = a * d - b * c;
if ( abs( denom ) < 1e-5 ) {
// parrallel
return 0;
} else {
float t = (e*d - b*f)/denom;
float s = (a*f - e*c)/denom;
if ( t >= 0 && t <= 1 && s >= 0 && s<=1 ) {
return new vec2f( a1.x + t * ( a2.x - a1.x ), a1.y + t * ( a2.y - a1.y ) );
}
return 0;
}
}
boolean crosses( vec2f a1, vec2f a2, vec2f b1, vec2f b2 ) {
float a = a2.x - a1.x;
float b = b1.x - b2.x;
float c = a2.y - a1.y;
float d = b1.y - b2.y;
float e = b1.x - a1.x;
float f = b1.y - a1.y;
float denom = a * d - b * c;
if ( abs( denom ) < 1e-5 ) {
// parrallel
return false;
} else {
float t = (e*d - b*f)/denom;
float s = (a*f - e*c)/denom;
return ( t >= 0 && t <= 1 && s >= 0 && s<=1 );
}
}
online identity ∋ [ social ∋ [mastodon♥, twitter®, facebook®, diaspora, linkedin®]
∥ repos ∋ [github®, gitlab♥, bitbucket®, sourceforge] ∥ media ∋ [itch.io®, vimeo®, peertube♥, twitch.tv®, tumblr®] ∥ communities ∋ [godotengine♥, openprocessing, stackoverflow, threejs]]