poj 1269 计算几何
/**
判断直线位置关系
**/
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
struct point {
double x,y;
point(double x=,double y=):x(x),y(y){}
}; typedef point Vector; Vector operator - (point A,point B){
return Vector(A.x-B.x,A.y-B.y);
} struct line {
point a,b;
};
double length(Vector v){
return sqrt(v.x*v.x+v.y*v.y);
} double cross(Vector A,Vector B){
return A.x*B.y-A.y*B.x;
} double distoline(point P,point A,point B){
Vector v1 =B-A,v2 = P-A;
return fabs(cross(v1,v2))/length(v1);
} int main()
{
int n;
cin>>n;
line l1,l2;
cout<<"INTERSECTING LINES OUTPUT"<<endl;
while(n--){
cin>>l1.a.x>>l1.a.y>>l1.b.x>>l1.b.y;
cin>>l2.a.x>>l2.a.y>>l2.b.x>>l2.b.y;
Vector tmp1,tmp2;
tmp1.x = l1.b.x-l1.a.x;
tmp1.y = l1.b.y-l1.a.y;
tmp2.x = l2.b.x-l2.a.x;
tmp2.y = l2.b.y-l2.a.y;
//cout<<tmp1.x<<" "<<tmp1.y<<endl;
//cout<<tmp2.x<<" "<<tmp2.y<<endl;
//cout<<cross(tmp1,tmp2)<<endl;
if(cross(tmp1,tmp2)==){
if(distoline(l1.a,l2.a,l2.b)==){
cout<<"LINE"<<endl;
}else
cout<<"NONE"<<endl;
}else{
double x,y;
if(l1.a.x==l1.b.x&&l2.a.x!=l2.b.x){
x = l1.a.x;
double k = (l2.b.y-l2.a.y)/(l2.b.x-l2.a.x);
double b = l2.a.y-k*l2.a.x;;
y = k*x+b;
}else if(l1.a.x!=l1.b.x&&l2.a.x==l2.b.x){
x = l2.a.x;
double k = (l1.b.y-l1.a.y)/(l1.b.x-l1.a.x);
double b = l1.a.y-k*l1.a.x;
y = k*x+b;
}else{
double k1= (l1.b.y-l1.a.y)/(l1.b.x-l1.a.x);
double b1=l1.a.y-k1*l1.a.x;
double k2 = (l2.b.y-l2.a.y)/(l2.b.x-l2.a.x);
double b2=l2.a.y-k2*l2.a.x;
x =(b2-b1)/(k1-k2);
y = k1*x+b1;
} printf("POINT %.2lf %.2lf\n",x,y);
}
}
cout<<"END OF OUTPUT"<<endl;
return ;
}
poj 1269 计算几何的更多相关文章
- POJ 1269 (直线求交)
Problem Intersecting Lines (POJ 1269) 题目大意 给定两条直线,问两条直线是否重合,是否平行,或求出交点. 解题分析 主要用叉积做,可以避免斜率被0除的情况. 求交 ...
- 直线相交 POJ 1269
// 直线相交 POJ 1269 // #include <bits/stdc++.h> #include <iostream> #include <cstdio> ...
- 判断两条直线的位置关系 POJ 1269 Intersecting Lines
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- poj 1269 线段与线段相交
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13605 Accepted: 60 ...
- POJ 1269 Intersecting Lines (判断直线位置关系)
题目链接:POJ 1269 Problem Description We all know that a pair of distinct points on a plane defines a li ...
- POJ 1269 Intersecting Lines(判断两直线位置关系)
题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...
- POJ 1269 Intersecting Lines --计算几何
题意: 二维平面,给两条线段,判断形成的直线是否重合,或是相交于一点,或是不相交. 解法: 简单几何. 重合: 叉积为0,且一条线段的一个端点到另一条直线的距离为0 不相交: 不满足重合的情况下叉积为 ...
- POJ 1269 Intersecting Lines(计算几何)
题意:给定4个点的坐标,前2个点是一条线,后2个点是另一条线,求这两条线的关系,如果相交,就输出交点. 题解:先判断是否共线,我用的是叉积的性质,用了2遍就可以判断4个点是否共线了,在用斜率判断是否平 ...
- ●POJ 1269 Intersecting Lines
题链: http://poj.org/problem?id=1269 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...
随机推荐
- LeetCode总结 -- 高精度篇
我们常见的一些主要的数据结构比方整型int或者浮点型float由于位数过多无法用内置类型存储,这时候我们就须要自己实现高精度的数据类型来进行存储和运算.这样的问题在实际产品中还是比較有用的,所以相对来 ...
- ubuntu14.04 Markdown编辑器推荐之Remarkable
如今已经习惯了用Markdown编辑器写博文的习惯,那么ubuntu以下有什么好用的呢?搜索中发现了这个叫Remarkable的免费Markdown编辑器.为什么推荐这个呢?说说它的特点: 实时预览 ...
- Win32下C++遍历目录和文件的源码
#include<windows.h> #include<iostream> #include<string> using namespace std; //只能处 ...
- 在centos6.5下yum仓库的创建
第一步:打开虚拟机,装入光盘镜像,选择为已连接 第二步: df -h mount umount /dev/sr0 mkdir /centos mount /dev/sr0 /centos mkdir ...
- .net 资源
基于.net构架的留言板项目大全源码 http://down.51cto.com/zt/70 ASP.net和C#.net通用权限系统组件功能教程 http://down.51cto.com/zt/1 ...
- 替换 window.location当中的某个参数的值(而其它值不变)JS代码
在后台与前台的交互操作中,需要替换location当中的某个参数的值(而其它值不变)时,会用到以下函数: 说明: win:传入的窗口句柄,如,window或window.parent等forceAdd ...
- C#学习日志 day 3 ------ 基本语句示例
写c#首先需要知道的就是数据类型,这里是所有c#中的所有数据类型以及说明.
- [C++]Infinite House of Pancakes——Google Code Jam 2015 Qualification Round
Problem It’s opening night at the opera, and your friend is the prima donna (the lead female singer) ...
- TCP的阻塞和重传
TCP的阻塞和重传 TCP的阻塞和重传机制 网络拥堵 现在网络上大部分的网络请求都是以TCP的方式进行传输的了.网络链路是固定的,各种链路情况也是不一样的.网络拥堵一直是TCP协议设计和使用的时候尽力 ...
- Mysql innodb 后台的7大线程与3大内存
A:一个master 线程(innodb 几乎在这个线程上实现有所有功能) B:一个lock 监控线程 C:一个错误监控线程 D:四个IO线程(insert buffer thread\log thr ...