Created
June 12, 2013 15:28
-
-
Save mutoo/5766321 to your computer and use it in GitHub Desktop.
code from http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Returns 1 if the lines intersect, otherwise 0. In addition, if the lines | |
| // intersect the intersection point may be stored in the floats i_x and i_y. | |
| char get_line_intersection(float p0_x, float p0_y, float p1_x, float p1_y, | |
| float p2_x, float p2_y, float p3_x, float p3_y, float *i_x, float *i_y) | |
| { | |
| float s1_x, s1_y, s2_x, s2_y; | |
| s1_x = p1_x - p0_x; s1_y = p1_y - p0_y; | |
| s2_x = p3_x - p2_x; s2_y = p3_y - p2_y; | |
| float s, t; | |
| s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y); | |
| t = ( s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y); | |
| if (s >= 0 && s <= 1 && t >= 0 && t <= 1) | |
| { | |
| // Collision detected | |
| if (i_x != NULL) | |
| *i_x = p0_x + (t * s1_x); | |
| if (i_y != NULL) | |
| *i_y = p0_y + (t * s1_y); | |
| return 1; | |
| } | |
| return 0; // No collision | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment