コード例 #1
0
ファイル: geometry.c プロジェクト: armenr/algorist
bool segments_intersect(segment s1, segment s2) {
	line l1, l2;		/* lines containing the input segments */
	point p;		/* intersection point */

	points_to_line(s1.p1, s1.p2, &l1);
	points_to_line(s2.p1, s2.p2, &l2);

	if(same_lineQ(l1, l2)) 	/* overlapping or disjoint segments */
		return( point_in_box(s1.p1, s2.p1, s2.p2) ||
			point_in_box(s1.p2, s2.p1, s2.p2) ||
			point_in_box(s2.p1, s1.p1, s1.p2) ||
			point_in_box(s2.p2, s1.p1, s1.p2) );

	if(parallelQ(l1, l2)) return(FALSE);

	intersection_point(l1, l2, p);

	return( point_in_box(p, s1.p1, s1.p2) && point_in_box(p, s2.p1, s2.p2) );
}
コード例 #2
0
bool segments_intersect(segment s1, segment s2)
{
	line l1, l2;

	points_to_line(s1.p1, s1.p2, &l1);
	points_to_line(s2.p1, s2.p2, &l2);

	if (same_lineQ(l1, l2))
		return (point_in_box(s1.p1, s2.p1, s2.p2) ||
				point_in_box(s1.p2, s2.p1, s2.p2) ||
				point_in_box(s2.p1, s1.p1, s1.p2) ||
				point_in_box(s2.p1, s1.p1, s1.p2) );
	
	if (parallelQ(l1, l2)) 
		return false;
	
	point2d p;		// intersection point
	intersection_point(l1, l2, p);
	return (point_in_box(p, s1.p1, s1.p2) && point_in_box(p, s2.p1, s2.p2) );
}
コード例 #3
0
ファイル: cgtest.c プロジェクト: LihuaWu/recipe
main()
{
	point p1,p2,q1,q2,i;
	line l1,l2;
	segment s1,s2,s3,s4;

	while ( scanf("%lf %lf",&p1[X],&p1[Y]) != EOF ) {
        	scanf("%lf %lf",&p2[X],&p2[Y]);
		scanf("%lf %lf",&q1[X],&q1[Y]);
		scanf("%lf %lf",&q2[X],&q2[Y]);

/*
	        print_point(p1);
		print_point(p2);
		print_point(q1);
		print_point(q2);
*/

		points_to_segment(p1,p2,&s1);
		points_to_segment(q1,q2,&s2);

                points_to_line(p1,p2,&l1);
                points_to_line(q1,q2,&l2);

		print_segment(s1);
		print_segment(s2);
		
/*
		printf("slope and line tests\n");
		point_and_slope_to_line(p1,-l1.a,&l3);
		print_line(l3);
                point_and_slope_to_line(p2,-l1.a,&l3);
                print_line(l3);
                point_and_slope_to_line(q1,-l2.a,&l3);
                print_line(l3);
                point_and_slope_to_line(q2,-l2.a,&l3);
                print_line(l3);
*/

		printf("segments_intersect test\n");
		printf("%d\n", segments_intersect(s1,s2));

		printf("intersection point\n");
		intersection_point(l1,l2,i);
		print_point(i);

/*
		printf("closest point\n");
		closest_point(p1,l1,i);
		print_point(i);
                closest_point(p2,l1,i);
                print_point(i);
                closest_point(q1,l1,i);
                print_point(i);
                closest_point(q2,l1,i);
                print_point(i);
                closest_point(p1,l2,i);
                print_point(i);
                closest_point(p2,l2,i);
                print_point(i);
                closest_point(q1,l2,i);
                print_point(i);
                closest_point(q2,l2,i);
                print_point(i);
*/


		printf("--------------------------------\n");
	}


}