POJ 1269 /// 判断两条直线的位置关系
题目大意:
t个测试用例 每次给出一对直线的两点
判断直线的相对关系
平行输出NODE 重合输出LINE 相交输出POINT和交点坐标
1.直线平行 两向量叉积为0
2.求两直线ab与cd交点
设直线ab上点为 a+(b-a)t,t为变量
交点需满足在直线cd上 则(d-c)*(a+t(b-a)-c)=0(外积)
分解为加减式 将t放在等号左边 其他放在右边
化简推导得t=(d-c)*(c-a)/(d-c)*(b-a)
则交点为a+(b-a)*((d-c)*(c-a)/(d-c)*(b-a))
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std; const double eps=1e-;
double add(double a,double b) {
if(abs(a+b)<eps*(abs(a)+abs(b))) return ;
return a+b;
}
struct P {
double x,y;
P(){};
P(double _x,double _y):x(_x),y(_y){}
P operator - (P p) {
return P(add(x,-p.x),add(y,-p.y)); }
P operator + (P p) {
return P(add(x,p.x),add(y,p.y)); }
P operator * (double d) {
return P(x*d,y*d); }
double dot(P p) {
return add(x*p.x,y*p.y); }
double det(P p) {
return add(x*p.y,-y*p.x); }
}p;
struct L {
P a,b;
L(){};
L(P _a,P _b):a(_a),b(_b){};
}l1,l2;
int n; P ins(P a,P b,P c,P d) {
return a+(b-a)*((d-c).det(c-a)/(d-c).det(b-a));
}
int solve()
{
if((l1.a-l1.b).det(l2.a-l2.b)==) { // 平行
return (l1.a-l2.b).det(l1.b-l2.b)==;
} // 若l2有一点在l1上 就是重合
p=ins(l1.a,l1.b,l2.a,l2.b); // 相交求交点
return -;
} int main()
{
while(~scanf("%d",&n)) {
printf("INTERSECTING LINES OUTPUT\n");
for(int i=;i<n;i++) {
scanf("%lf%lf%lf%lf"
,&l1.a.x,&l1.a.y,&l1.b.x,&l1.b.y);
scanf("%lf%lf%lf%lf"
,&l2.a.x,&l2.a.y,&l2.b.x,&l2.b.y);
int t=solve();
if(t==) printf("NONE\n");
else if(t==) printf("LINE\n");
else printf("POINT %.2f %.2f\n",p.x,p.y);
}
printf("END OF OUTPUT\n");
}
}
POJ 1269 /// 判断两条直线的位置关系的更多相关文章
- 判断两条直线的位置关系 POJ 1269 Intersecting Lines
两条直线可能有三种关系:1.共线 2.平行(不包括共线) 3.相交. 那给定两条直线怎么判断他们的位置关系呢.还是用到向量的叉积 例题:POJ 1269 题意:这道题是给定四个点p1, ...
- POJ 2318 /// 判断点与直线的位置关系
题目大意: n块玩具箱隔板 m个玩具落地点 给定玩具箱的左上和右下两个端点 接下来给定n块隔板的上点的x和下点的x(因为y就是玩具箱的上下边缘) 接下来给定m个玩具落地点 输出n+1个区域各有的玩具数 ...
- POJ1269:Intersecting Lines(判断两条直线的关系)
题目:POJ1269 题意:给你两条直线的坐标,判断两条直线是否共线.平行.相交,若相交,求出交点. 思路:直线相交判断.如果相交求交点. 首先先判断是否共线,之后判断是否平行,如果都不是就直接求交点 ...
- C# 判断两条直线距离
本文告诉大家获得两条一般式直线距离 一般式的意思就是 Ax+By+C=0" role="presentation">Ax+By+C=0Ax+By+C=0 如果有两个 ...
- 2018-7-31-C#-判断两条直线距离
title author date CreateTime categories C# 判断两条直线距离 lindexi 2018-07-31 14:38:13 +0800 2018-05-08 10: ...
- Intersecting Lines--POJ1269(判断两条直线的关系 && 求两条直线的交点)
http://poj.org/problem?id=1269 我今天才知道原来标准的浮点输出用%.2f 并不是%.2lf 所以wa了好几次 题目大意: 就给你两个线段 然后求这两个线段所在的 ...
- C# 判断两条直线是否相交
直接上代码,过程不复杂 /// <summary> /// 判断两条线是否相交 /// </summary> /// <param name="a"& ...
- cocos2d-x 判断两条直线是否相交
bool GraphicsUtil::linesCross(b2Vec2 v0, b2Vec2 v1, b2Vec2 t0, b2Vec2 t1, b2Vec2 &intersectionPo ...
- POJ 2398 map /// 判断点与直线的位置关系
题目大意: poj2318改个输出 输出 a: b 即有a个玩具的格子有b个 可以先看下poj2318的报告 用map就很方便 #include <cstdio> #include < ...
随机推荐
- UDP部分
IP地址:互联网协议地址,计算机的通行证.计算机在网络中的唯一身份标识.桥接:Ubuntu虚拟机 直接连到局域网NAT:网络地址转换点分十进制:192.168.14.115IP地址通常为4个字节,简称 ...
- Element-UI 的树列表实现单选
1. Element-UI 的 el-tree 组件当设置了 show-checkbox 属性以后,默认是只能多选的,如果我们想要将其改选为单选,就要进行一些特殊的处理,首先看效果图. 2. 组件代码 ...
- RN书签
Bookmarks 书签栏 门户 配置reactNative(RN)过程中 出现react-native:command not... - 简书 * React-NativeChannel - sma ...
- iOS开发静态库冲突——如何查看静态库(.O)中方法名
1.bug产生 应用第三方静态库之后提示冲突错误: 2.bug分析 一般会提示哪两个库冲突: CameraShowGLView.o是自己创建的类编译生成的: libLechangeSDK.a是添加的静 ...
- bagging和boosting以及rand-forest
bagging: 让该学习算法训练多轮,每轮的训练集由从初始的训练集中随机取出的n个训练样本组成,某个初始训练样本在某轮训练集中可以出现多次或根本不出现,训练之后可得到一个预测函数序列h_1,⋯ ⋯h ...
- ## jvm知识点零碎整理
1.初始化VM options配置 idea安装目录\bin\idea.exe.vmoptions 和 idea64.exe.vmoptions可以看到初始配置: -Xms128m (设置初始化堆内 ...
- pathlib生成文件的软链接
在训练深度网络时,保存模型,想要维护一个latest.t7的文件,想到给最好的模型创建一个软链接到latest.t7 这样模型不占地,还能便于后续脚本加载最好模型 起初是看到mmdetection中是 ...
- java_函数式编程写法
package cn.aikang.Test; import org.junit.Test; import java.util.Scanner; import java.util.function.S ...
- java 数组中的数值反转输出
package com.test; /** *数组元素反转 * */ public class ArraySwap { public static void main(String[] args) { ...
- shell 脚本999乘法表
99乘法表 vi st.sh 编辑一个脚本 chmod 777 st.sh 修改权限 注意调整空格,否则打印不出效果 执行脚本 ./st.sh 打印结果