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 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...
随机推荐
- 让EF支持sql语句
BaseDal类: public class BaseDal : IDisposable { #region 事件 internal Func<bool> DBCommitting; in ...
- ServiceStack 入门(二)
本文介绍创建一个简单的基于ServiceStack的项目. 1. 新建一个solution 2.创建完成后有4个project. ServiceModel是定义Request DTO 和 Reques ...
- 【ActionBar的使用】
在AS工程中使用ActionBar 简单实用: 1.功能清单文件中指定主题标签属性Theme.Holo或其子类 <application android :theme="@androi ...
- Archlinux 安装配置指导 2015-05-24
因为用的Linode VPS的系统是Archlinux的,想在本地弄个系统做测试用,这样比较方便.然后发现自己在6年前做的一个Archlinux 安装配置Flash,好怀念的赶脚. 时过进迁,没想到A ...
- iOS开发篇-AFNetworking 上传和下载
最近用到了关于AFNetworking的上传和下载问题,顺便写到博客中,以供大家参考和研究. //下载NSURLSessionConfiguration *configuration = [NSURL ...
- .NET软件开发与常用工具清单
[工欲善其事,必先利其器]软件开发的第一步就是选择高效.智能的工具. 下面列出的工具软件能辅助提高工作效率. 开发类工具 微软.Net平台下的集成开发环境:Visual Studio. Visual ...
- C - 下沙小面的(2)
C – 下沙小面的(2)Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64uSubmit StatusDes ...
- SGU 101.Domino( 欧拉路径 )
求欧拉路径...直接dfs即可,时间复杂度O(N) -------------------------------------------------------------------------- ...
- Java学习之网络编程
转自:http://blog.csdn.net/driverking/article/details/6573992 一.网络编程基本概念 1.OSI与TCP/IP体系模型 2.IP和端口 解决了文章 ...
- Struts2拦截器总结
拦截器的本质: 拦截器就是一个类,一个实现了超级接口Interceptor的类.Interceptor接口里定义了三个方法 init(),destory(),intercept().其中inercep ...