求助C语言编程的几何题目~~
题目要求很简单,就是输入M条直线,然后判断这些直线的交点
我用交叉相乘正负判断方向的办法,来做这个题目,也就是下面的CROSS 函数。
程序运行了以后,在判断2条直线的时候,没有问题,但是当我输入3条直线比如(0 0 1 1)(0 1 0 0)(0 0 1 0)的时候,结果就只剩下一个交点了。
请教各位大大,我的程序错在了什么地方。
程序写的不太好,可读性可能不太好。各位见谅哈。
#include <stdio.h>
int cross(double a,double b,double c,double d,double e,double f,double g,double h)
{
double p1[2],p2[2],p3[2],r1,r2,t1[2],t2[2],t3[2];
p1[0]=c-a;p1[1]=d-b;
p2[0]=e-a;p2[1]=f-b;
p3[0]=g-a;p3[1]=h-b;
r1=(p1[0]*p2[1]-p1[1]*p2[0])*(p1[0]*p3[1]-p1[1]*p3[0]);
t1[0]=a-c;t1[1]=b-d;
t2[0]=e-c;t2[1]=f-d;
t3[0]=g-c;t3[1]=h-d;
r2=(t1[0]*t2[1]-t1[1]*t2[0])*(t1[0]*t3[1]-t1[1]*t3[0]);
if(r1<=0&&r2<=0) return 1;
else return 0;
}
void main ()
{
int i,m,flag,sum=0,j,t;
double a[100][4];
scanf("%d",&m);
for(i=0;i<m;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
if(m=2)
for(i=0;i<1;i++)
{
flag=cross(a[i][0],a[i][1],a[i][2],a[i][3],a[i+1][0],a[i+1][1],a[i+1][2],a[i+1][3]);
sum+=flag;
}
if(m>2)
{
for(j=0;j<4;j++)
{
a[m][j]=a[0][j];
}
for(i=0;i<m;i++)
{
flag=cross(a[i][0],a[i][1],a[i][2],a[i][3],a[i+1][0],a[i+1][1],a[i+1][2],a[i+1][3]);
t=flag;
sum+=t;
}
}
printf("%d",sum);
}