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 题解: 计算几何,直线交点 模板题,试了一下直线的向量参数方程求交点的方法. (方法详见<算法竞赛入门经典——训练指南> ...
随机推荐
- jeecms 2012 源码分析(2) 前台栏目页静态化分析
还是要说到web.xml文件 <welcome-file-list> <welcome-file>index.html</welcome-file> <wel ...
- cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
首先,你需要下载三个文件:每间 android-ndk android-sdk ant 下载位置可以随意:由于3.0rc2执行setup.py 自己主动搜索这三个文件 win32cmd以下: (1) ...
- Linux下安装Oracle的过程和涉及的知识点-系列4
10.使用rpm安装包 假设本地有现成的相关包,能够直接使用rpm安装.rpm rpm包名,但有时会出现它须要其他包的支持,这时若须要忽略此提示.强行安装,运行rpm -i --force --nod ...
- javascript DOM,它到底是什么-------Day32
这一晚上看的我是头疼不已啊,为什么呢? 终究是半路出家,我对javascript的理解仅仅停留在:调用javascript,改变页面样式,元素和实现一些事件的响应,尽管须要的时候可能会用,可是到底使用 ...
- English - when用法
一.作为副词,它有以下的用法: 1. 作为疑问副词,引导特殊疑问句,意为“什么时候:何时”.如: ( 1 ) When will they come back?( 2 ) What time wil ...
- 简述sprintf、fprintf和printf函数的区别
都是把格式好的字符串输出,只是输出的目标不一样:1 printf,是把格式字符串输出到标准输出(一般是屏幕,可以重定向).2 sprintf,是把格式字符串输出到指定字符串中,所以参数比printf多 ...
- Unity StrangeIoc框架 (二)
MVCSContex :the big picture 1.应用程序的入口是一个类成为ContextView,这是一个Monobehavior实例化MVCSContext 2.用MVCSContext ...
- apache+mysql+php环境的手动搭建
一.搭建Apache Http Server 官方下载地址:http://www.apachehaus.com/cgi-bin/download.plx 搭建环境:win10 64位 WIN10 64 ...
- 四轴飞行器1.2.3 STM32F407时钟配置和升级标准库文件
原创文章,欢迎转载,转载请注明出处 这个星期进度比较慢哈,只有周末和晚上下班回来才能做,事件不连续,琐碎的事情又比较多,挺烦的,有多琐碎呢? 1.本人有点小强迫症哈,虽然RTT将文 ...
- SSD的基本架构
在SSD的优势一章中,我们对比过HDD和SSD的内部区别.现在,我们再谈一下SSD的基本架构. 上图为一款典型的SSD架构图解,各部分的解释如下: 操作 ...