用C语言写个程序判断两条线段的位置关系。编译器是VC6.0
具体流程是先输入2个点坐标得到一条线段,然后再输入2点坐标得到另外一条线段,然后就判断这两条线段的位置关系(相交或者不相交)
用C语言写个程序判断两条线段的位置关系。编译器是VC6.0
具体流程是先输入2个点坐标得到一条线段,然后再输入2点坐标得到另外一条线段,然后就判断这两条线段的位置关系(相交或者不相交)
很抱歉,第一次写的程序代码有问题方法存在很多未考虑的情况,这是修改后补充的答案。
#include<stdio.h>
struct point
{
double x;
double y;
};
int main()
{
struct point a,b,c,d;
double k1,k2,tempx;
printf("input point a,b,c,d(坐标点x值延x轴正方向): \n");
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
k1=(b.y-a.y)/(b.x-a.x);
k2=(d.y-c.y)/(d.x-c.x);
if(k1==k2)
printf("the two line is horizentol.\n");
else
{
tempx=(c.y-a.y+k1*a.x-k2*c.x)/(k1-k2);
if(tempx>=a.x&&tempx<=b.x)
{
printf("两条线段相交。\n");
}
else
printf("两条线段不相交。\n");
}
return 0;
}
我已经测试过,可以运行。谢谢采纳。不懂追问。
看看这个
#include<stdio.h> #include<math.h> int main() { int a,b,c,d,X1,Y1,X2,Y2; printf("第一条线段:\n"); printf("输入第一个点的坐标(用空格间隔):"); scanf("%d %d",&a,&b);
printf("输入第二个点的坐标(用空格间隔):"); scanf("%d %d",&c,&d); X1 = (int)fabs(a-c); Y1 = (int)fabs(b-d); printf("第二条线段:\n"); printf("输入第一个点的坐标(用空格间隔):"); scanf("%d %d",&a,&b);
printf("输入第二个点的坐标(用空格间隔):"); scanf("%d %d",&c,&d); X2 = (int)fabs(a-c); Y2 = (int)fabs(b-d); if(X1*Y2 == X2*Y1) printf("这两条线不相交\n"); else printf("这两条线相交\n"); return 1; }