#include<stdio.h>
#include<string.h>
#define min(a,b) a>b?b:a
#define max(a,b) a>b?a:b
struct hello
{
int x,y;
}p1,p2,t1,t2;
int paichi()//快速排斥实验
{
if(
min(p1.x,p2.x)<max(t1.x,t2.x)&&
min(t1.x,t2.x)<max(p1.x,p2.x)&&
min(p1.y,p2.y)<max(t1.y,t2.y)&&
min(t1.y,t2.y)<max(p1.y,p2.y)
)
return 1;
return 0;
}
int cross(int a,int b,int c,int d) //叉积
{
return a*b-c*d;
}
int kuali()
{
int p1t1x=t1.x-p1.x, p1t1y=t1.y-p1.y;
int p1p2x=p2.x-p1.x, p1p2y=p2.y-p1.y;
int p1t2x=t2.x-p1.x, p1t2y=t2.y-p1.y;
int t1p1x=p1.x-t1.x, t1p1y=p1.y-t1.y;
int t1t2x=t2.x-t1.x, t1t2y=t2.y-t1.y;
int t1p2x=p2.x-t1.x, t1p2y=p2.y-t1.y;
if(cross(p1t1x,p1p2y,p1t1y,p1p2x)*cross(p1p2x,p1t2y,p1p2y,p1t2x)>=0)
{
if(cross(t1p1x,t1t2y,t1p1y,t1t2x)*(t1t2x,t1p2y,t1t2y,t1p2x)>=0)
return 1;
}
return 0;
}
int main()
{
int i,j;
while(1)
{
scanf("%d%d",&p1.x,&p1.y);
scanf("%d%d",&p2.x,&p2.y);
scanf("%d%d",&t1.x,&t1.y);
scanf("%d%d",&t2.x,&t2.y);
if(paichi())
{
if(kuali())
puts("Yes");
else
puts("No");
}
else
puts("No");
}
}计算几何之判断两线段是否相交
最新推荐文章于 2023-01-05 16:34:13 发布
本文介绍了一种用于判断两个矩形是否相交的方法,包括快速排斥实验和利用叉积进行精确判断。通过C语言实现,适用于解决计算机图形学中常见的矩形相交问题。
8823

被折叠的 条评论
为什么被折叠?



