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;
}
以下是代码:
#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;
}
相关文章推荐
- POJ 1269 Intersecting Lines(判断两条直线的位置关系)
- POJ 1269 Intersecting Lines(计算几何)
- POJ 1269 Intersecting Lines(判断直线相交)
- POJ1269:Intersecting Lines——题解
- POJ 1269直线相交
- 有向图和无向图的连通性学习小记 Poj 1269 迷宫城堡
- POJ 1269 Intersecting Lines 判断两直线关系
- POJ 1269 Intersecting Lines (两直线之间的位置关系)
- POJ 计算几何专项训练(2) 【1269】&【1410】&【1696】&【3347】&【2826】
- POJ 1269 Intersecting Lines(计算几何 求交点)
- poj 1269 Intersecting Lines 直线交点
- POJ 1269 Intersecting Lines(判断两直线的位置关系)
- [POJ1269]Intersecting Lines(计算几何)
- poj 1269 直线间的关系
- POJ 1269 Intersecting Lines(几何 + 直线问题)
- POJ1269- Intersecting Lines
- POJ 1269
- POJ 1269 Intersecting Lines 求两直线交点
- POJ1269 Intersecting Lines[线段相交 交点]
- POJ 1269