ZOJ 1280 Interesting Lines | 求两直线交点
2017-12-07 15:34
239 查看
原题:
求两直线交点
思路借鉴于:http://blog.csdn.net/zxy_snow/article/details/6341282
感谢大佬
#include<cstdio> #include<algorithm> #include<cstring> #define eps 1e-8 using namespace std; int T; struct point//点(向量的结构体) { double x,y; point() {}//初始化 point (int _x,int _y) : x(_x),y(_y) {};//用一对坐标初始化点 inline point operator + (const point &rhs) const//向量加法 { return point(x+rhs.x,y+rhs.y); } inline point operator - (const point &rhs) const//向量减法 { return point(x-rhs.x,y-rhs.y); } inline int operator * (const point &rhs) const//向量叉乘 //向量叉乘的几何意义是以两个向量为邻边的平行四边形的有向面积 也就是|a|*|b|*sin<a,b> 这里的sin<a,b>决定了 //如果a,b是逆时针的,那么sin<a,b>大于0,有向面积大于0,反之<0 { return x*rhs.y-y*rhs.x; } friend inline int dot(const point &lhs,const point &rhs)//向量点乘 { return lhs.x*rhs.x+lhs.y*rhs.y; } }p1,p2,p3,p4; inline bool check(const point &p1,const point &p2,const point &p3) { if (abs((p1-p3)*(p2-p3))<eps) return 1; return 0; } double abs(double x) { return x>0?x:-x; } int main() { scanf("%d",&T); puts("INTERSECTING LINES OUTPUT"); while (T--) { 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 (check(p1,p2,p3) && check(p1,p2,p4)) { puts("LINE"); continue; } if (abs((p2.x-p1.x)*(p4.y-p3.y)-(p4.x-p3.x)*(p2.y-p1.y))<eps) { puts("NONE"); continue; } double a1=(p1.y-p2.y),b1=(p2.x-p1.x),c1=(p1.x*p2.y-p2.x*p1.y); double a2=(p3.y-p4.y),b2=(p4.x-p3.x),c2=(p3.x*p4.y-p4.x*p3.y); printf("POINT %.2f %.2f\n",(c1*b2-c2*b1)/(a2*b1-a1*b2),(a2*c1-a1*c2)/(a1*b2-a2*b1)); } puts("END OF OUTPUT"); return 0; }
相关文章推荐
- [poj] 1269 [zoj] 1280 Interesting Lines || 求两直线交点
- zoj 1280 Intersecting Lines(两直线交点)
- zoj 1450 (http://blog.himdd.com/?p=2666) 很多只是可以做模板,直线相交求交点,三角形外接圆圆心(外心)
- ZOJ 1683 求平面上直线交点 & 求任意四边形面积
- zoj 1560 Hansel and Grethel(求两条直线的交点)
- C++ 实现已知直线上两个点求解直线方程,并求两条直线的交点
- hdu1466 计算直线的交点数
- 15HD_OJ——计算直线的交点数
- 【HDOJ】1466 计算直线的交点数
- 计算直线的交点数(HDU-1466)
- HDU - 1466 计算直线的交点数
- 计算直线的交点数(hdu1466简单的dp)
- Intersecting Lines(直线相交判断,求相交交点)
- 求两条直线的关系及交点
- Problem B 直线交点的个数
- JAVA求两直线交点和三角形内外心的方法
- POJ 1269 Intersecting Lines 求两直线交点
- 网易游戏笔试题─两个圆相交,交点是A1,A2。现在过A1点做一直线与两个圆分别相交另外一点B1,B2。 B1B2可以绕着A1点旋转。问在什么情况下,B1B2最长
- hdu 1466 计算直线的交点数
- POJ 3304 Segments 线段和直线的交点