ZOJ 1280 Interesting Lines | 求两直线交点
原题:
求两直线交点
思路借鉴于: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;
}
ZOJ 1280 Interesting Lines | 求两直线交点的更多相关文章
- [poj] 1269 [zoj] 1280 Interesting Lines || 求两直线交点
POJ原题 ZOJ原题 多组数据.每次给出四个点,前两个点确定一条直线,后两个点确定一条直线,若平行则输出"NONE",重合输出"LINE",相交输出" ...
- hdu 2857:Mirror and Light(计算几何,点关于直线的对称点,求两线段交点坐标)
Mirror and Light Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Intersecting Lines---poj1269(求两直线的位置关系)
题目链接:http://poj.org/problem?id=1269 题意:给你两条直线上的任意不同的两点,然后求两条直线的位置关系,如果相交于一点输出该点坐标; #include<iostr ...
- Gym-101915B Ali and Wi-Fi 计算几何 求两圆交点
题面 题意:给你n个圆,每个圆有一个权值,你可以选择一个点,可以获得覆盖这个点的圆中,权值最大的m个的权值,问最多权值是多少 题解:好像是叙利亚的题....我们画画图就知道,我们要找的就是圆与圆交的那 ...
- POJ_1269_Intersecting Lines_求直线交点
POJ_1269_Intersecting Lines_求直线交点 Description We all know that a pair of distinct points on a plane ...
- Uva 11178 Morley's Theorem 向量旋转+求直线交点
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=9 题意: Morlery定理是这样的:作三角形ABC每个 ...
- UVa 11178:Morley’s Theorem(两射线交点)
Problem DMorley’s TheoremInput: Standard Input Output: Standard Output Morley’s theorem states that ...
- C++ 根据两点式方法求直线并求两条直线的交点
Line.h #pragma once //Microsoft Visual Studio 2015 Enterprise //根据两点式方法求直线,并求两条直线的交点 #include"B ...
- poj 1269 Intersecting Lines(判断两直线关系,并求交点坐标)
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12421 Accepted: 55 ...
随机推荐
- HDU.3177Crixalis's Equipment(贪心)
题目来源:3177 题目分析:一只蝎子要搬动一堆装备到一个容量为V的洞里面,每个装备有两个属性,一个是固有体积A,放置之后洞的剩余空间就会减少A,一个是移动体积B,只有当体积B小于等于当前洞的剩余体积 ...
- Java对象容器总结
泛型容器类 容器类型: ArrayList 元素类型: 有排序 String:里面存放的是对象的管理者,而不是具体的对象,所以string类型有null值 集合容器 容器类型 Set 元素类型 唯一性 ...
- Shell学习——变量
1.在Bash中,每一个变量的值都是字符串 2.查看某个进程的环境变量 cat /proc/$PID/environ | tr '\0' '\n' 3.变量赋值 3.1.var=value,注意var ...
- 在程序开发中,++i 与 i++的区别
在不参与运算的情况下,i++和++i都是在变量的基础加1 ◆在参与运算的情况下 Var i=123; Var j=i++; 先将i的值123赋值给j,之后再自增 j的值为123 i 的值为124 ...
- 操作 Java 数组的 12 个最佳方法
1. 声明一个数组 Java代码: String[] aArray = new String[5]; String[] bArray = {"a","b",& ...
- 【转载】java 客户端链接不上redis解决方案 (jedis)
本文出自:http://blog.csdn.net/lulidaitian/article/details/51946169 出现问题描述: 1.Could not get a resource fr ...
- paramiko基本操作
paramiko 是一个用作远程控制的模块,它遵循SSH2协议,支持以加密和认证的方式来进行远程服务器的连接.操作.上传和下载. 官方文档地址:http://docs.paramiko.org/ pa ...
- PowerShell脚本授权最佳实践
[TechTarget中国原创] Windows PowerShell已成为微软在Windows Server上提供的首选管理界面.因为深度整合到Windows Server操作系统,PowerShe ...
- Monkey、Monkeyrunner之间的区别
Monkey.Monkeyrunner之间的区别 一.Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输 ...
- Mysql忘记root密码怎么办?(已解决)
为了写这篇文档,假装一下忘记密码!!!! 首先我数据库是正常的,可以使用. root@localhost:~# mysql -uroot -p mysql> mysql> show dat ...