编写一个例程来查找两条线段的交点,intersect_segment
bool segments_intersect(
point_t a0, point_t a1,
point_t b0, b1,
point_t* intersection
)
编写一个四边形中的点例程,point_in_quad
bool point_in_quad(point_t p, quad_t q)
将segments_intersect
应用于每对线段,其中第一条在红色四边形中,第二条在紫色四边形中(总共16个测试)
point_t temp;
if(segments_intersect(red.p1, red.p2, purple.p1, purple.p2, &temp)))
found_point(temp);
if(segments_intersect(red.p1, red.p2, purple.p2, purple.p3, &temp))
found_point(temp);
if(segments_intersect(red.p1, red.p2, purple.p3, purple.p4, &temp))
found_point(temp);
//10 more
if(segments_intersect(red.p4, red.p1, purple.p2, purple.p3, &temp))
found_point(temp);
if(segments_intersect(red.p4, red.p1, purple.p3, purple.p4, &temp))
found_point(temp);
if(segments_intersect(red.p4, red.p1, purple.p4, purple.p1, &temp))
found_point(temp);
将point_in_quad
应用于红色四边形中的每个点,测试紫色四边形:
if(point_in_quad(red.p1, purple)) found_point(red.p1);
if(point_in_quad(red.p2, purple)) found_point(red.p2);
if(point_in_quad(red.p3, purple)) found_point(red.p3);
if(point_in_quad(red.p4, purple)) found_point(red.p4);
将point_in_quad
应用于紫色四边形中的每个点,测试红色四边形:
if(point_in_quad(purple.p1, red)) found_point(purple.p1);
if(point_in_quad(purple.p2, red)) found_point(purple.p2);
if(point_in_quad(purple.p3, red)) found_point(purple.p3);
if(point_in_quad(purple.p4, red)) found_point(purple.p4);