楼上的代码也太简单了,简单到将线段相交变成了直线相交,所以不对,因为线段是有端点的,比如,将如下两条线段画出来,它就明显不相交,只是它们所在的直线可以相交。
x0=1,y0=2,x1=9,y1=6,x2=3,y2=2,x3=5,y3=0;
因为通过计算,交点的位置是:X =2.333333 Y=2.666667
这里X和Y的值已经不在x2=3,y2=2,x3=5,y3=0的取值范围之列了。
修改如下就好了:

程序代码:
#include<stdio.h>
int main()
{
double x,y,x0,y0,x1,y1,x2,y2,x3,y3,k1,k2;
scanf("%lf %lf %lf %lf %lf %lf %lf %lf",&x0,&y0,&x1,&y1,&x2,&y2,&x3,&y3);
k1=(y0-y1)/(x0-x1);
k2=(y2-y3)/(x2-x3);
x=(k1*x0-k2*x2+y2-y0)/(k1-k2);
y=y0+(x-x0)*k1;
if ( ( ( (x>x0)&&(x<x1))&&( (y>y0)&&(y<y1) )||( (x<x0)&&(x>x1))&&( (y<y0)&&(y>y1) ) )&& ( ( (x>x2)&&(x<x3))&&( (y>y2)&&(y<y3) )||( (x<x2)&&(x>x3))&&( (y<y2)&&(y>y3) ) ) )
{ printf("该两条线段相交\n");
printf("%lf %lf\n",x,y);
}
else printf("该两条线段不相交\n");
return 0;
}
[此贴子已经被作者于2020-7-29 08:28编辑过]