您的位置:首页 > 其它

poj1269 简单的计算几何

2013-07-19 20:39 295 查看
这是学了计算几何后做的第一道题,刚开始没看清题意以为是求线段的。于是模版往上一套WA,悲剧啊

后来好好看了一下题目  又看了一下别人的代码  发现是自己题目没看清   原来是过这两个点的直线   改了之后果断AC啊!   高兴   虽然这是一道很水的题目  但是还是值得高兴

需要的知识大家都会   两条直线求交点难道自己不会推   肯定会啊  自己推吧

下面是我写的代码  仅供参考

#include<cstdio>///判断两条是否相交  共线   相交求出交点
#include<cstring>
#include<cmath>
#include<algorithm>
#define eps 1e-8

using namespace std;
struct Point
{
double x,y;
}s[4];

typedef struct Point point;

double multi(point p0, point p1, point p2)//叉积
{
return ( p1.x - p0.x )*( p2.y - p0.y )-( p2.x - p0.x )*( p1.y - p0.y );
}

int isIntersected(point s1,point e1, point s2,point e2)//判断是否相交  在一条线上  或不相交
{
if(fabs(multi(s1,e1,s2))<=eps&&fabs(multi(s1,e1,e2))<=eps)printf("LINE\n");
else if((e1.x-s1.x)*(e2.y-s2.y)==(e2.x-s2.x)*(e1.y-s1.y)) printf("NONE\n");
else     //注意这要求的是两条直线的交点  不是两条线段的
{
point jiaodian;
double a1=s1.y-e1.y;
double b1=e1.x-s1.x;
double c1=s1.x*e1.y-e1.x*s1.y;

double a2=s2.y-e2.y;
double b2=e2.x-s2.x;
double c2=s2.x*e2.y-e2.x*s2.y;

jiaodian.x=(b1*c2-b2*c1)/(a1*b2-a2*b1);
jiaodian.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
printf("POINT %.2f %.2f\n",jiaodian.x,jiaodian.y);
}
}

int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif // LOACL
int N;
scanf("%d",&N);
printf("INTERSECTING LINES OUTPUT\n");
while(N--)
{
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&s[0].x,&s[0].y,&s[1].x,&s[1].y,&s[2].x,&s[2].y,&s[3].x,&s[3].y);
isIntersected(s[0],s[1],s[2],s[3]);
}
printf("END OF OUTPUT\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  计算几何