POJ 1269 (直线求交)
Problem Intersecting Lines (POJ 1269)
题目大意
给定两条直线,问两条直线是否重合,是否平行,或求出交点。
解题分析
主要用叉积做,可以避免斜率被0除的情况。
求交点P0: 已知P1 P2 P3 P4
运用 P0P1 X P0P2 = 0 和 P0P3 X P0P4 = 0
C++ 用%.2lf g++ 用 %.2f!!!
C++ 用%.2lf g++ 用 %.2f!!!
C++ 用%.2lf g++ 用 %.2f!!!
参考程序
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std; #define eps 1e-8 struct P{
double x,y; P(){}
P(double x,double y):x(x),y(y){} friend P operator +(P a,P b){
return P(a.x+b.x,a.y+b.y);
}
friend P operator -(P a,P b){
return P(a.x-b.x,a.y-b.y);
}
friend double operator *(P a,P b){
return a.x * b.y - a.y * b.x ;
}
friend double operator /(P a,P b){
return a.x * b.x + a.y * b.y ;
}
friend bool operator ==(P a,P b){
return fabs(a.x-b.x)<eps && fabs(a.y-b.y)<eps;
}
friend bool operator !=(P a,P b){
return !(a==b);
}
friend bool operator <(P a,P b){
if (fabs(a.y-b.y)<eps) return a.x<b.x;
return a.y<b.y;
}
friend double turn(P a,P b,P c){ //向量AB X 向量AC
return (b-a)*(c-a);
}
friend void print(P a){
printf("%.2lf %.2lf\n",a.x,a.y);
}
}; struct L{
P a,b;
L(){}
L(P a,P b):a(a),b(b){}
friend P subl(L a){ //向量l
return P(a.b.x-a.a.x,a.b.y-a.a.y);
}
}; bool online(L l,P p){
if (fabs(turn(l.a,l.b,p))<eps) return ;
return ;
}
P solve(double a1,double b1,double c1,double a2,double b2,double c2){
P a;
a.x = (b1*c2-b2*c1)/(a1*b2-a2*b1);
a.y = (a1*c2-a2*c1)/(a2*b1-a1*b2);
return a;
}
void check(L lx,L ly){
if (online(lx,ly.a) && online(lx,ly.b)) printf("LINE\n"); else
if (fabs(subl(lx)*subl(ly))<eps) printf("NONE\n"); else
{
double x1=lx.a.x , y1=lx.a.y;
double x2=lx.b.x , y2=lx.b.y;
double x3=ly.a.x , y3=ly.a.y;
double x4=ly.b.x , y4=ly.b.y;
double a1 = y1 - y2 , b1 = x2 - x1 , c1 = x1*y2 - x2*y1 ;
double a2 = y3 - y4 , b2 = x4 - x3 , c2 = x3*y4 - x4*y3 ;
printf("POINT ");
print(solve(a1,b1,c1,a2,b2,c2));
}
} int main(){
int T;
scanf("%d",&T);
printf("INTERSECTING LINES OUTPUT\n");
while (T--){
double x1,y1,x2,y2,x3,y3,x4,y4;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3,&x4,&y4);
P a(x1,y1),b(x2,y2),c(x3,y3),d(x4,y4);
L lx(a,b),ly(c,d);
check(lx,ly);
}
printf("END OF OUTPUT\n");
}
POJ 1269 (直线求交)的更多相关文章
- POJ 1269 (直线相交) Intersecting Lines
水题,以前总结的模板还是很好用的. #include <cstdio> #include <cmath> using namespace std; ; int dcmp(dou ...
- poj 1269 直线间的关系
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9360 Accepted: 421 ...
- POJ 1269 Intersecting Lines 直线交
不知道谁转的计算几何题集里面有这个题...标题还写的是基本线段求交... 结果题都没看就直接敲了个线段交...各种姿势WA一遍以后发现题意根本不是线段交而是直线交...白改了那个模板... 乱发文的同 ...
- 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
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- POJ 1269 Intersecting Lines(判断两直线位置关系)
题目传送门:POJ 1269 Intersecting Lines Description We all know that a pair of distinct points on a plane ...
- 直线相交 POJ 1269
// 直线相交 POJ 1269 // #include <bits/stdc++.h> #include <iostream> #include <cstdio> ...
- OpenCASCADE直线与平面求交
OpenCASCADE直线与平面求交 在<解析几何>相关的书中都给出了直线和平面的一般方程和参数方程.其中直线的一般方程有点向式形式的. 由于过空间一点可作且只能作一条直线平行于已知直线, ...
- HDU - 3982:Harry Potter and J.K.Rowling(半平面交+圆与多边形求交)(WA ing)
pro:给定一枚蛋糕,蛋糕上某个位置有个草莓,寿星在上面切了N刀,最后寿星会吃含有草莓的那一块蛋糕,问他的蛋糕占总蛋糕的面积比. sol:显然需要半平面交求含有蛋糕的那一块,然后有圆弧,不太方便求交. ...
随机推荐
- target不起作用了
原因是 <a href="",target></a>中间多了个逗号.
- Java 集合系列 10 Hashtable详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- Python输出内容的三种方式:print输出 python脚本执行 linux直接执行
1. 在linux中安装python后,在linux命令行中输入python即可切换到Python命令行下 退出python命令行的命令: 老版本:ctrl+D 新版本:quit();或exit() ...
- lmdb简介——结合MVCC的B+树嵌入式数据库
lmdb简介 lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎.其主要特性有: 基于文件映射IO(mmap) 基于B+树的key-value接口 基于MVCC(Multi ...
- Windows常用的DOS命令
cleanmgr–打开磁盘清理工具compmgmt.msc---计算机管理conf—-启动 netmeetingcharmap–-启动字符映射表calc—-启动计算器chkdsk.exe–-Chkds ...
- CentOS 常用命令大全(2)
系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinf ...
- linux :TOP命令及参数解析
第二行 分别显示:total进程总数. running正在运行的进程数. sleeping睡眠的进程数.stopped停止的进程数. zombie僵尸进程数. 第三行 分别显示: %us 用户空间占用 ...
- 【vmware vcp 5.1】安装及配置及笔记散记
ESXi的几个命令技巧: ------------------------------------------------- alt-f1: 进入console alt-f2: 返回DCUI alt- ...
- 161018--NOIP模拟
老实说,感觉自己好菜啊..(安慰自己省选做多了 T1:看似1e6很大,实际上常数52都能草过去...不知为何RE.. T2:记忆化搜索.看错题目条件QAQ,其实把自己暴力搜的程序改改就好了.. T3: ...
- uva -- 10766
一开始我感觉是模板题 是不想写的 后来发现我的模板上没有 就敲了一遍 可以忽略这句屁话 在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少 ...