나는이 질문에 대한 답변으로 게시 한이 코드를 사용하고 허용 오차 교차 : 그것은 나의 이해는이 기능은 교차점을 반환 How do you detect where two line segments intersect?결정이있는 경우 선분
입니다 두 선분 경우 정확히 교차합니다. 공차를 포함하도록이 함수를 수정하여 선분 이 거의 인 경우 (즉 0.01 범위 내에서) 교차점을 반환해야합니다. 나는이 기능을 뒷받침하는 수학을 이해하지 못해 누군가가 도울 수 있기를 바랬다.
감사
// 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
}
편집 : 이미지 아래 시나리오의 종류를 묘사 명확한 설명함으로써 것 거의 교차하는 두 개의 선분.
Nearly intersecting lines - image
제발, 거의 교차하는 것을 의미하십시오. 2 차원 비행기에서, 나는 이것이 어떻게 보일지 전혀 모른다. – schorsch312
아마도 이것은 interrest의 것입니다 : https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect – 4386427
링크 된 Q & A에있는 참고 문헌에 답이 있어야합니다. 필요한 것. –