您的位置:首页 > 其它

poj 1269

2011-04-15 13:27 190 查看
计算几何的又一个基础题,直接用黑书的模版即可。问题是要求出对于给定的两条的直线中的两点,得出两条直线的关系:平行、共线和相交,相交时求出交点。

以下是代码:

#include<cstdio>
#include<iostream>
using namespace std;

struct point
{
double x,y;
}p1,p2,p3,p4,p0;
double a1,b1,c1,a2,b2,c2;

void solve()
{
p0.x=(c1*b2-c2*b1)/(a2*b1-a1*b2);
p0.y=(a2*c1-a1*c2)/(a1*b2-a2*b1);
}

double crossmul(point p1,point p2,point p3) //叉乘
{
return (p3.x-p1.x)*(p2.y-p1.y)-(p2.x-p1.x)*(p3.y-p1.y);
}

double pointmul(point p1,point p2,point p3,point p4) //点乘
{
return (p1.x-p2.x)*(p3.y-p4.y)-(p1.y-p2.y)*(p3.x-p4.x);
}

int main()
{
int T;
scanf("%d",&T);
printf("INTERSECTING LINES OUTPUT/n");
while(T--)
{
int i;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&p1.x,&p1.y,&p2.x,&p2.y,&p3.x,&p3.y,&p4.x,&p4.y);
if(crossmul(p3,p4,p1)==0 && crossmul(p3,p4,p2)==0)

printf("LINE/n"); //判断两条直线是否共线
else
{
if(pointmul(p1,p2,p3,p4)==0) //判断两条直线是否平行
printf("NONE/n");
else
{
a1=p1.y-p2.y; b1=p2.x-p1.x; c1=p1.x*p2.y-p2.x*p1.y;
a2=p3.y-p4.y; b2=p4.x-p3.x; c2=p3.x*p4.y-p4.x*p3.y;
solve();
printf("POINT %.2lf %.2lf/n",p0.x,p0.y); //求出两条直线的交点
}
}
}
printf("END OF OUTPUT/n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: