首页 > 其他分享 >【笔记】计算几何

【笔记】计算几何

时间:2024-07-25 19:51:07浏览次数:13  
标签:AB return 计算 point 笔记 istream 几何 operator friend

% 经典问题

%.1 平面最近点对

分治是容易想到的。主要是合并,如果我们要更优,那么一定比左右两个子区间更优,所以我们初步框定了每个点最多能产生贡献的点集,而这个点集内部的两个点,如果同属一个子区间,那么之间的距离必定天然满足大于等于该子区间的最优答案,所以实际上我们框定范围内的点就很少了,直接暴力更新答案就好。


template

struct point {
	double x, y;
	friend istream& operator >> (istream& in, point& p) { return in >> p.x >> p.y; }
	friend ostream& operator << (ostream& out, point& p) { return out << '(' << p.x << ',' << p.y << ") "; }
	point operator + (point p) { return {x+p.x, y+p.y}; };
	point operator - (point p) { return {x-p.x, y-p.y}; };
	point operator * (double t) { return {x*t, y*t}; };
	double operator ^ (point p) { return x*p.x + y*p.y; };  // 点积
	double operator & (point p) { return x*p.y - y*p.x; };  // 叉积
};
double dist (point x, point y) {
	return sqrt((x.x-y.x)*(x.x-y.x) + (x.y-y.y)*(x.y-y.y));
}
typedef point vec;
struct segment {
	point s, t;
	friend istream& operator >> (istream& in, segment& p) { return in >> p.s >> p.t; }
};
struct polygon {
	vector<point> a;
	friend ostream& operator << (ostream& out, polygon& p) {
		for (point i : p.a) out << i; return out;
	}
} sec[N];
bool is_inner (point p, polygon& x) {
	for (int i = 1; i < x.a.size(); i++)
		if (((x.a[i-1]-p) * (x.a[i]-p)) <= 0)
			return 0;
	return ((x.a.back()-p) * (x.a[0]-p)) >= 0;
}
bool is_intersect (segment a, segment b) {  // 不考虑共线的情况
	point A = a.s, B = a.t, C = b.s, D = b.t;
	vec AB = B-A, AC = C-A, AD = D-A;
	vec CD = D-C, CA = A-C, CB = B-C;
    return (AB & AC) * (AB & AD) < -eps && (CD & CA) * (CD & CB) < -eps;
}

标签:AB,return,计算,point,笔记,istream,几何,operator,friend
From: https://www.cnblogs.com/CloudWings/p/18324024

相关文章

  • 计算机组成原理
    计算机系统概述计算机系统=硬件+软件硬件的发展:1.电子管时代 2.晶体管时代 3.中小规模集成电路 4.大规模、超大规模集成电路计算机硬件的基本组成1.早期冯诺依曼结构冯诺依曼计算机的特点:①计算机由五大部件组成②指令和数据以同等地位存于存储器,可按地址寻访③指令和数据......
  • C++学习笔记-operator关键字:重载与自定义操作符
    在C++编程中,operator关键字扮演着极其重要且独特的角色。它允许开发者为内置类型或自定义类型重载或定义新的操作符行为。这一特性极大地增强了C++的表达能力,使得代码更加直观、易于理解和维护。本文将深入探讨C++中operator关键字的使用,包括操作符重载和自定义操作符的基本......
  • Unity中有关Animation的一点笔记
    也许更好的阅读体验AnimationUnity中Animation类并不是直接记载了和播放动画有关的信息,可以简单理解Animation为一个动画播放器,播放的具体内容就像卡带一样,当我们有了卡带后我们可以播放动画。对应的则是编辑器中的组件所以Animation里有一些和播放器的函数:函数名函数功......
  • c++学习笔记(五)
    目录文件操作文本文件写文件include读文件include二进制文件写文件读文件文件操作程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件可以将数据持久化c++中对文件操作需要包含头文件文件类型分为两种:文本文件-文件以文本的ASCII码形式存储在计算......
  • ResNet论文笔记
    ResNet论文笔记为什么不是神经网络越深,训练效果越好?神经网络加深,训练效果差可能是以下因素引起的:梯度爆炸/消失(否决)已经通过标准化解决过拟合现象(否决)过拟合现象应该是在训练集表现好,测试集表现差图中的现象很明显不是过拟合(在训练集和测试集都差)神经网络退化......
  • pytorch深度学习笔记
    copy()是浅拷贝,它创建一个新的对象,但是只复制了对象本身及其顶层元素的引用,而不是元素的内容。deepcopy() 是深拷贝,它创建一个全新的对象,递归地复制原始对象及其所有嵌套的对象。这意味着它会复制对象本身以及对象中的所有元素,包括嵌套的列表、字典等。模型通过学习率获得稳定......
  • HarmonyOS NEXT 学习笔记5--extend扩展组件
    1.代码:@Entry@ComponentstructPage_Button_Extend{@Statemessage:string='HelloWorld';build(){Column({space:10}){Button('微信支付').MyButton('wechat')Button('支付宝').My......
  • SSM-网络课程系统-29230(免费领源码+开发文档)可做计算机毕业设计JAVA、PHP、爬虫、APP
    SSM网络课程系统摘 要本论文主要论述了如何使用SSM框架开发一个网络课程系统,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构Java技术,面向对象编程思想进行项目开发。在引言中,将论述网络课程系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统......
  • 计组笔记第五章——中央处理器
    5.1CPU的功能和基本结构CPU的功能指令控制:完成取指令、分析指令和执行指令的操作,即程序的顺序控制。操作控制:一条指令的功能往往是由若干操作信号的组合来实现的。CPU管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行......
  • Living-Dream 系列笔记 第65期
    HDU6567首先我们发现每棵树内部的距离已经固定,只有经过新边的路径才会产生贡献。又因为重心到树上所有节点的距离和最小,所以我们连接两树重心。然后我们想到一个经典套路:计算距离可以不枚举点,只枚举边。于是我们枚举每条边,计算出它们各自被经过的次数,再求和即为答案。维护\(......