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:显然需要半平面交求含有蛋糕的那一块,然后有圆弧,不太方便求交. ...
随机推荐
- [转]sql中判断text类型字段是否为空
用 字段=''会报错:数据类型 text 和 varchar 在 equal to 运算符中不兼容. 正确方法: 1. 字段 is null 2. datalength(字段)=0 注:SQL中的DA ...
- php solr 扩展
安装php的solr扩展 下载地址: http://pecl.php.net/get/solr windows下载地址: http://downloads.php.net/pierre/php_sol ...
- jdk和tomcat环境部署
部署前需要准备的东西: 1.确定操作系统(32位或64位) 2.准备对应的jdk和tomcat软件 3.准备一份环境变量配置说明,省的到时候忘记了 步骤: 1.安装JDK 安装好JDK后,再配置JDK ...
- 摄像机导致的粒子效果混乱出错变成贴图sprite显示在镜头前
只要把出错的摄像机记的标签改成maincamera问题就消失了!! 我之前一直以为是烘培导致的问题!
- POJ 1573 Robot Motion 模拟 难度:0
#define ONLINE_JUDGE #include<cstdio> #include <cstring> #include <algorithm> usin ...
- win7 摄像头驱动软件找不到,只有sys文件
有的驱动只有sys文件,但是仍然可以在qq视频等用,只是找不到amcap.exe等可执行文件, 因为没有摄像头软件,下载一个安装上即可
- 如何在redhat下安装办公软件(openoffice)
在redhat的client版本中自带有办公软件libreoffice,而在server版的redhat中却没有自带的办公软件,那么,如何在redhat的server版下安装办公软件呢? 方法一:配置 ...
- 增加JVM虚拟机内存,防止内存溢出
JAVA_OPTS=-Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=512M -XX:MaxNewSize=256m
- HTML参考
HTML Basic Document <html> <head> <title>Document name goes here</title> < ...
- Actioncontext之类的map嵌套,取值
假设图中最顶端的map设为Actioncontext的map,这种情况,用<s:property value=""/>或者EL表达式取值,可以用#key1.key2.k ...