POJ3304 计算几何--判断直线与线段相交

POJ3304(计算几何基础-判断线段与直线相交) Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14774 Accepted: 4690 DescriptionGiven n segments in the two dimensional space, write a program, which determines if th 阅读详情

POJ3304 题意“:给N个线段,如果N个线段能找到一条直线L ,使得N个线段在L上投影至少有一个公共点,输出YES,否则输出NO

思路:如果存在L的话,能说明什么。。说明L的法线L’肯定能经过所有的线段

若存在一条直线L‘能经过所有线段,说明存在L’经过所有线段的两个端点

那么我们只要枚举两个端点P1P2,对每个直线P1P2 遍历所有线段i:1~N,用外积<=0来判断线段的两个端点L1L2是否在P1P2的两侧,如果找到一组P1P2就能输出YES了

(L1P1^L1P2 )*(L2P1^L2P2 )<0        ^代表外积,如下图


注意:要判断重复点,即P1P2有可能重点,那么只要加判一下就好了


代码如下:

#include
#include
#include
#include
typedef long long int ll;
using   namespace    std;
const double eps = 1e-8;
const double PI = acos(-1.0);
int sgn(double x)
{
	if(fabs(x) < eps)return 0;
	if(x < 0)return -1;
	else return 1;
}
struct point
{
	double x,y;
	point() {}  point(double _x,double _y)
	{
		x = _x;
		y = _y;
	}  point operator -(const point &b)const
	{
		return point(x - b.x,y - b.y);

	}
	double operator ^(const point &b)const	//叉积
	{
		return x*b.y - y*b.x;
	}
	double operator *(const point &b)const //点积
	{
		return x*b.x + y*b.y;     //绕原点旋转角度B(弧度值),后x,y的变化
	}
	void transXY(double B)
	{
		double tx = x,ty = y;
		x = tx*cos(B) - ty*sin(B);
		y = tx*sin(B) + ty*cos(B);
	}
}points[1005];
struct line
{
	point s,e;
	line() {}
	line(point _s,point _e)
	{
		s = _s;
		e = _e;
	}
} lines[1005];
double xmult(point p0,point p1,point p2) //计算p0p1 X p0p2
{
	return (p1-p0)^(p2-p0);
}
bool check(line a,int n)
{
	if(sgn(a.s.x-a.e.x)==0&&sgn(a.s.y-a.e.y)==0)//重复点
		return false;
	int flag=0;
	for(int i=0; i0)//同侧 
		{
			return false;
		}	
	}
	return true;
}
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		int num=0;
		for(int i=0; i>t1>>t2>>t3>>t4;
			points[num++]=point(t1,t2);
			points[num++]=point(t3,t4);
			lines[i].s=point(t1,t2);
			lines[i].e=point(t3,t4);
		}
		int flag=0;
		if(n<3)
		flag=1; 
		for(int i=0; i<num; i++)
		{
			for(int j=i+1; j<num; j++)
			{
				line lt1=line(points[i],points[j]);
				if(check(lt1,n))
				{
				//	cout<<lt1.s.x<<" "<<lt1.s.y<<" "<<i<<" "<<j<<" "<<endl; 
				//	cout<<lt1.e.x<<" "<<lt1.e.y<<" "<<i<<" "<<j<<" "<<endl; 
					flag=1;
					break;
				}
			}
			if(flag)
			break;
		}
		if(flag)
		printf("Yes!\n");
		else
		printf("No!\n");
	}

}sssssss




POJ 3304 Segments [枚举+叉乘判断线段相交]【计算几何】 题目链接 http://poj.org/problem?id=3304Segments Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11920 Accepted: 3757 DescriptionGiven n segments in the two dimensional space, write a prog 阅读详情

相关推荐

代码判断两条线段是否相交(两种实现算法)

编程实现了如何判断一个平面里的两条线段是否相交!

判断直线与线段相交 POJ 3304 Segments

题意:在二维平面中,给定一些线段,然后判断在某直线上的投影是否有公共点。 转化,既然是投影,那么就是求是否存在一条直线L和所有的线段都相交。 证明: 下面给出具体的分析:先考虑一个特殊的情况,即n=1的时候,如下图,线段AB在直线L上的投影为线段A'B',则过任意介于A'B'之间的点C'做直线L的垂线必交线段AB与一点C;反之,过线段AB之间任意一点C做直线L的垂线,垂足必定落...

dizhuo0219的博客 311

Android车载应用开发与分析(11)- 车载Android应用开发入门指南

将时间回退到2017年我大学刚毕业时,彼时移动互联网就已经开始退潮,各大个培训机构也纷纷停止了Android相关的培训,曾经热火朝天的应用开发从那时起,就开始走向下坡路,小程序以及众多跨平台框架也让市场对Android原生开发的需求逐年降低,市场需求的降低也造就了Android开发的面试变得史无前例的“卷”。 终于我在2019年选择离开了互联网,投身当时还不是非常火热的车载Android领域继续从事Android原生开发。而这一年中国首个外商独资的整车制造项目,“...

linkwj的博客 1万+

POJ3304:直线与线段相交

POJ3304 题解 所有线段的投影都交于一点,相当于有一条直线的垂线经过所有的线段。 直线经过所有的点,我们可以旋转直线,使它恰好经过线段的两个端点,所有O(n^2)枚举端点。 判断ab直线和线段cd是否相交,只要判ab×ac和ab×ad的符号是否小于等于0。比判断线段和线段相交少一个条件。 最后注意重点的判断,因为叉积为0可能是直线和线段重合。 代码 #include <i...

FlyingJack 846

AXI_IIC调试实战:从失败到成功的读写操作经验分享

本文分享了调试Xilinx AXI_IIC IP核从失败到成功的实战经验。文章详细解析了IP核以FIFO和状态机为核心的工作机制,强调了状态寄存器查询与延时等待的关键作用,并提供了针对EEPROM的单字节读写操作完整代码与避坑指南,帮助开发者高效完成AXI_IIC读写操作。

weixin_29169505的博客 370

VConsole动态加载

// 移动端真机调试工具 vconsole import VConsole from "vconsole"; import Vue from "vue"; // 动态使用VConsole if(process.env.NODE_ENV==='production'){ if(process.env.VUE_APP_BASEURL.includes('test')||process.env.VUE_APP_BASEURL.includes('pre')){ Vue.prototype

aliven1的博客 1041

判断两条直线是否相交c语言,计算几何-两条线段是否相交(三种算法)

原标题:计算几何-两条线段是否相交(三种算法)计算几何中,判断线段是否相交是最基本的题目。 所谓几何, 最基本的当然就是坐标, 从坐标中我们可以知道位置和方向,比如:一个点就是一个位置,两点确定一条直线,从某点指向另一点的有向线段所在的直线是一向量。要处理几何题,我们又不得不涉及到叉积和点积, 判断线段相交就要用到叉积。下面先讲讲相交的形式:说到线段, 我们很自然想到直线,判断两条直线是否相交只需...

weixin_42299873的博客 2900

【SPSS实战】手动实现Quade非参数协方差分析:从数据准备到结果解读

本文详细介绍了在SPSS中手动实现Quade非参数协方差分析的实战方法。当数据不满足正态分布等参数检验假设时,通过将协变量和因变量转换为秩,并利用秩回归残差进行Kruskal-Wallis组间比较,提供了一种清晰、可操作的近似解决方案。该方法有效解决了非正态数据的协变量调整问题,适用于实验研究和调查数据分析。

bean的博客 468

数学美 之 判断线段相交的最简方法

首发于我的博客 转载请注明出处 解析几何的巅峰 是 向量那无关过程的狂妄与简洁映射着大自然无与伦比的美 引子 如何判断两条直线是否相交? 这很容易。平面直线,无非就是两种关系:相交 或 平行。因此,只需判断它们是否平行即可。而直线平行,等价于它们的斜率相等,只需分别计算出它们的斜率,即可做出判断。 但倘若我把“直线”换成“线段”呢...

weixin_34006965的博客 1908

16、TFT-LCD 1.8寸显示屏使用

1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。1.8寸TFT-LCD显示屏,简单来说就是用来显示东西的显示器,跟之前的oled1315显示屏的作用是一样的,今天我们就来使用TFT显示屏显示一些内容。这块显示屏在淘宝就可以买得到,驱动版本是ST7735S,这里圈住,一会要考的。

繁星点点~ 6768

YOLOv10改进策略【注意力机制篇】| 2024 蒙特卡罗注意力(MCAttn)模块,提高小目标的关注度

本文记录的是基于蒙特卡罗注意力(MCAttn)模块的YOLOv10目标检测改进方法研究。利用提高的跨尺度特征提取能力,使模型能够更好地传递和融合提取的多尺度特征,提高对小目标的关注度。Exploiting Scale-Variant Attention for Segmenting Small Medical Objects使用一种基于随机采样的池化操作来生成尺度无关的注意力图。它从三个不同尺度(3×33×33×3、2×22×22×2和1×11×11×1,即池化张量)中随机选择一个1×11×11×1注意力图

Limiiiing的博客 2186

判断两条线段/直线相交,并求交点

一.矢量基本知识     因为后面的计算需要一些矢量的基本知识,这里只是简单的列举如下,如果需要更加详细的信息,可以自行搜索wikipedia或google。 1.矢量的概念:如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。 2.矢量加减法:设二维矢量P =

s77108887的专栏 1万+

SPAD IMX479规格_VOP

对于VOP的定义,很多人可能是不理解这一路的供电,实际上这一路供电是非常重要的,这是给器件SPAD供电,决定SPAD是否work,在大部分的paper以及大部分公司,基本都是叫VOP,名称是SPAD breakdown voltage power supply,严格意义上叫Operating Voltage,工作电压。当然有些公司也有一些其他叫法就不提了。其实大家可以明显的看出,典型值-20.5没有发生变化,市面上绝大多数VOP的典型值也都是在-20V这边。

致力于lidar应用开发 701

POJ 3304 Segments [计算几何,判断直线和线段相交]

题目 Given n segments in the two dimensional space, write a program, which determines if there exists a line such that after projecting these segments on it, all projected segments have at least one point in common. Input Input begins with a number T showing

sehnsucht 185

Swin Transformer 类可视化(grad CAM)

完整代码 from pytorch_grad_cam import GradCAM, ScoreCAM, GradCAMPlusPlus, AblationCAM, XGradCAM, EigenCAM from pytorch_grad_cam.utils.image import show_cam_on_image from torchvision.models import resnet50 import glob from demo import parse_option from models i

G果的博客 6639

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

POJ 3304 Segments (计算几何、判断直线与线段是否相交)

题目链接:http://poj.org/problem?id=3304 题意: 3 2 1.0 2.0 3.0 4.0 4.0 5.0 6.0 7.0 3 0.0 0.0 0.0 1.0 0.0 1.0 0.0 2.0 1.0 1.0 2.0 1.0 3 0.0 0.0 0.0 1.0 0.0 2.0 0.0 3.0 1.0 1.0 2.0 1.0

Benjamin_Z的博客 931

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

POJ 3304 Segments(计算几何 判断直线与线段相交)

Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7833   Accepted: 2363 Description Given n segments in the two dimensional space, write a program, whic

sunrain的专栏 863

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

poj3304 Segments 判断直线与线段相交【计算几何】

Segments Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17786   Accepted: 5596 Description Given n segments in the two dimensional space, write a program, which determi...

紫芝的博客 575

POJ 3304 Segments <计算几何(直线与线段相交判断)>

题目题目大意:平面上有一些线段,问是否存在一条直线,使所有线段在这条直线上的投影至少有一个公共点。分析:如果存在这样一条直线,那么选取投影的一个公共点,过此点做这条直线的垂线,这条垂线与所有线段都相交,所以题目就转为了求是否存在一条直线与所有线段均相交。而如果存在这样的直线,我们总可以通过平移和旋转将其变化为,至少通过所有线段的某两个端点,这样我们枚举任意两个端点形成的直线即可。代码:#includ

sinat_36135197的博客 272

Segments POJ - 3304 (计算几何,线段与直线相交的判断)

Given n segments in the two dimensional space, write a program, which determines if there exists a line such that after projecting these segments on it, all projected segments have at least one point ...

untilyouydc 266

【POJ3304】Segments【计算几何,直线与线段相交】

linklinklink 分析: 题意:::在一个平面中 给nnn条线段 问是否存在一条直线与所有线段相交 若存在这样的直线 就会存在一条经过某线段端点的直线 所以枚举直线 看是否与线段两端相交 判断直线与线段相交:::叉积>0>0>0说明在顺时针 <0<0<0说明在逆时针 两叉积乘积<0<0<0说明直线与线段跨立 即相交 注意题目中说两点距离<1e−8<1e-8<1e−8就会被视作一点 CODE: #include<iostr.

绫 293

poj3304 Segments【计算几何】

C - Segments POJ - 3304 最近开始刷计算几何了 公式好多完全不会数学不行 几何不行 记忆力不行 当机查的题解 就当复习吧 这套专题拿来熟悉一下计算几何模板#include &lt;iostream&gt; #include&lt;stdio.h&gt; #include&lt;math.h&gt; using namespace std; const double eps...

wybooooooooo的博客 313

POJ 3304(计算几何初步——判断线段和直线相交,加上枚举)

这题有2点要注意: 一丶当n==1时,应特判输出YES 二丶精度控制,当2点的距离相差小于1E-8,近似看作同一点。 View Code 1 #include<iostream> 2 #include<cmath> 3 #define EPS 1e-8 4 #define MAXN 104 5 using namespace std; 6 struct po...

weixin_30498921的博客 131

POJ 3304

POJ 3304计算几何基础,叉积应用 大意是给出n条线段,问是否存在一条直线使得所有线段投影到直线上后存在至少一个公共点。其实就是判断是否存在一条直线与所有线段相交。 画图稍加分析可以发现,如果存在一条直线与所有线段相交,我们可以转动这条直线与至少两个线段端点重合,也就是说,我们可以通过枚举两个端点来确定一条直线,再判断它是否与所有线段相交。 枚举端点O(n^2),判断与线段相交O(n),总

Infinity的博客 492

POJ 3304 Segments(计算几何:直线与线段相交)

POJ 3304 Segments 大意:给你一些线段,找出一条直线能够穿过所有的线段,相交包括端点。 思路:遍历所有的端点,取两个点形成直线,判断直线是否与所有线段相交,如果存在这样的直线,输出Yes,但是注意去重。 struct Point { double x, y; } P[210]; struct Line { Point a, b; } L

GLSilence的专栏 827
上一篇: POJ2398 计算几何外积+二分
下一篇: POJ1269 计算几何直线与直线的关系
animalcoder
博客等级 码龄9年 43粉丝 150原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值