ACM几何问题

ACM计算几何篇 1 前言 1.1 计算几何算法 1.2 计算几何题目特点及要领 1.3 预备知识 2 凸包 2.1 定义 2.1.1 凸多边形 2.1.2 凸包 2.2 颜料配色问题 2.2.1 问题描述 2.2.2 问题简化 2.2.3 问题抽象 2.2.4 数学抽象 2.2.4.1 Convex Combination And Affine Combination 2.2.4.2 区别与联系 ... 阅读详情
今天复习了一下几何的基础内容,顺便整理了一下。
其实几何也挺简单的,只要熟练掌握点积和叉积,这些都是易学易懂的。

1.点、直线、线段、圆、三角形、多边形、矩形->判相交,判位置,求交点,求最近点,求特殊点(三角形六心等)

2.凸包(水平序,极角序)*(规范,非规范)

3.半平面交(求核)

4.旋转卡壳(多边形直径、宽度,两个多边形间的最近最远距离)

5.扫描线(坑)

6.KD-树(坑)

7.三角剖分



基础概念及知识:
向量(x, y)的极角就是atan2(y, x);
两个向量的点积就等于x1 * x2 + y1 * y2;夹角小于90度为正。
两个向量的叉积就等于x1 * y2 - y1 * x2;某向量与他左边的向量叉积为正。
叉积的结果即为两向量所组成的平行四边形的面积。
向量旋转公式:x' = x * cosa - y * sina, y' = x * sina + y * cosa。
点到直线的距离:平行四边形的面积除以底。
线段相交:每条线段的两个端点都在另一条线段的两侧,即叉积的符号不同。

//定义
struct Point
{
    double x, y;
    Point(double x = 0, double y = 0) : x(x), y(y);{}
};
typedef Point Vector;

//向量相加
Vector operator + (Vector A, Vector B)
{
    return Vector(A.x + B.x, A.y + B.y);
}

//比较<
bool operator < (const Point &a, const Point &b)
{
    return a.x < b.x || (a.x == b.x && a.y < b.y);
}

//比较==
bool operator == (const Point &a, const Point &b)
{
    return dcmp(a.x - b.x) == 0 && dcmp(a.y - b.y) == 0;
}

//三态函数
const double eps = 1e - 10;
int dcmp(double x)
{
    if (fabs(x) < eps) return 0;
    else return x < 0 ? -1 : 1;
}

//点积
double Dot(Vector A, Vector B)
{
    return A.x * B.x + A.y * B.y;
}

//求向量长度
double Length(Vector A)
{
    return sqrt(Dot(A, A));
}

//求两向量夹角
double Angle(Vector A, Vector B)
{
    return acos(Dot(A, B) / Length(A) / Length(B));
}

//叉积
double Cross(Vector A, Vector B)
{
    return A.x * B.y - A.y * B.x;
}

//面积
doubel Area2(Point A, Point B, Point C)
{
    return Cross(B - A, C - A);
}

//向量旋转   rad是弧度
Vector Rotate(Vector A, double rad)
{
    return Vector(A.x * cos(rad) - A.y * sin(rad), A.x * sin(rad) + A.y * cos(rad));
}

//点到直线的距离
double DistanceToLine(Point P, Point A, Point B)
{
    Vector v1 = B - A, v2 = P - A;
    return fabs(Cross(v1, v2)) / Length(v1);
}

//点到线段的距离
double DistanceToSegment(Point P, Point A, Point B)
{
    if (A == B) return Length(P - A);
    Vector v1 = B - A, v2 = P - A, v3 = P - B;
    if (dcmp(Dot(v1, v2)) < 0) return Length(v2);
    else if (dcmp(Dot(v1, v3)) > 0) return Length(v3);
    else return fabs(Cross(v1, v2)) / Length(v1);
}

//点P在直线AB上的投影Q
Point GetLineProjection(Point P, Point A, Point B)
{
    Vector v = B - A;
    return A + v * (Dot(v, P - A) / Dot(v, v));

}

//线段相交
bool SegmentProperIntersection(Point a1, Point a2, Point b1, Point b2)
{
    double c1 = Cross(a2 - a1, b1 - a1);
    double c2 = Cross(a2 - a1, b2 - a1);
    double c3 = Cross(b2 - b1, a1 - b1);
    double c4 = Cross(b2 - b1, a2 - a1);
    return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
}

//判断一个点是否在线段上
bool OnSegment(Point p, Point a1, Point a2)
{
    return dcmp(Cross(a1 - p, a2 - p)) == 0 && dcmp(Dot(a1 - p, a2 - p)) < 0;
}

//计算多边形的有向面积
double PolygonArea(Point *p, int n)
{
    double area = 0;
    for (int i = 1; i < n - 1; i++)
    {
        area += Cross(p[i] - p[0], p[i + 1] - p[0]);
    }
    return area / 2;
}

有一道挺不错的凸包题目,链接:NOJ  [1201] Chihuo II - Eating in China
http://ac.nbutoj.com/Problem/view.xhtml?id=1201
ACM竞赛题型总结 初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) (3)递归和分治法. (4)递推. (5)构造法.(poj3295) (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(... 阅读详情

相关推荐

spark 适配达梦数据库

spark 适配达梦数据库 版本 spark3.0.0 scala2.12.10 DM Database Server 64 V8 步骤一: 引驱动包: SBT方式: "com.dameng" % "Dm8JdbcDriver18" % "8.1.0.157", maven方式: <dependency> <groupId>com.dameng</groupId> <artifactId>Dm8JdbcDriver18</artifac

_@Eva@_的博客 2091

ACM计算几何问题

最近看到关于计算几何的东西,总结以下 矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。 如果有向线段p1,p2的起点p1在坐标原点,我们可以把它称为矢量(vector) p2。 矢量矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 )。 则矢量加法定义为: P + Q = ( x1 + x2 , y1 ...

RandyLambert的博客 778

SimpleITK图像基础(一)——3D Resampling

文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM

YYY_77的博客 2021

ACM几何问题基础知识讲解(附代码)

看了刘汝佳的《算法竞赛入门经典》之训练指南这本书的几何问题之后,受益匪浅,然后根据我自己平时的几何知识写下这篇关于二维几何基础的文章,希望对大家有用。 首先我们要理解什么是向量,向量就是有大小和方向的量。在平面坐标系中,向量用x,y表示。等于向量起点到终点的位移。以下是它们的常用定义:   struct Point { double x,y; Point(double x=0

代码改变世界,keep coding。 2066

记一次Redis出问题及解决方案

Q1: redis服务关闭前确认数据还是在的,重启后发现一条数据都没了,key* 查也是空的 A1: 经仔细检查发现redis.conf配置文件配置的数据存储目录配置的是dir ./ 也就是相对目录,也就是说在哪个目录执行redis-server redis.config启动命令 redis数据就会存到哪个目录,同样就会加载哪个目录下的数据文件(dump.rdb),前后两次启动命令的位置不一样导致第二次启动没有加载到(dump.rdb)文件,从而导致查不出数据 Q2:springboot 集成r

u010013928的博客 3059

知识图谱本体建模工具Protege使用教程

1.下载 先去官网下载:protégé 直接下最新版,点击会有注册页面,只填必填项的name和project description即可。 下载后解压即可使用。 2、安装可视化工具Graphviz 去官网:Download | Graphviz下载。下一个最新版的zip就行。 我解压在了Protege文件夹下,然后在 Preference下指定目录。 指定一下你解压完的Graphviz下的dot.exe,确定。 PS:如果这样报错就尝试在环境变量的系统变量的...

子麒的博客 2万+

近几年ICPC区域赛的中的计算几何

区域赛临近,和队友疯狂VP,但是补题补少了,感觉其实有点在找心理安慰的感觉,先简单地整理一下最近做过的计算几何题

doyowhat的博客 1800

Gephi新手必看:如何用Excel整理CSV数据快速生成网络图(附模板)

本文为Gephi新手提供了一份从Excel数据整理到生成专业网络图的完整指南。详细讲解了如何构建规范的节点表和边表CSV文件,并导入Gephi进行可视化分析。通过实战案例,帮助读者快速掌握利用Excel整理数据、规避常见错误,并运用布局算法与视觉编码,将复杂关系数据转化为直观的网络洞察。

weixin_28487433的博客 391

ACM算法总结 平面几何

平面几何 基础知识 像一些点、向量、点乘、叉乘、圆等等知识,应该都是最基本的平面几何知识,这里就不再赘述,主要考虑如何实现这些平面几何的运算。 首先是定义一些常量和宏定义: #define RAD(x) (pi*x/180) #define DEG(x) (x*180/pi) const double eps=1e-8; const double pi=acos(-1); int dcmp(d...

dragonylee的博客 797

数模笔记_多变量最优化计算之牛顿法

Date: 2_22 Name: Guo Yehao Theme: Calculation in Optimality with multiple variables Reference: 数学建模方法与分析(华章) 在上一节中,我们讨论多变量最优化计算中的随机搜索算法,它的精度并不是众多算法中最高的。在精度问题上,有的时候问题本身就带有明显的误差性,以至于我们不能将其忽略,比如上一节消防站部署的问题,我们在区域划分时就有了误差,因此我们并不需要对结果要求很高的精确度,所以用一些比较粗略的算法就可以.

weixin_45358177的博客 2416

酒店前台pms管理系统

对于酒店经营者来说,选择一款优秀的管理系统,是提升运营效率、优化客人体验的关键。PMS酒店管理系统凭借其强大的房态管理、实时数据监控、OTA直联、无人值守等功能,已经成为许多酒店提升管理水平的得力助手。无论是大中型酒店,还是小型民宿,PMS系统都能根据不同需求提供量身定制的解决方案,帮助酒店实现精细化管理、提高运营效率。如果你也在为酒店管理中的繁琐琐事而困扰,不妨尝试一下PMS酒店管理系统,感受科技带来的便利与高效,让你的酒店运营更上一层楼!

2409_89897808的博客 2485

ACM 计算几何基础模板

在ACM计算几何中,我们常常重复用到许多方法,例如求点距,求直线方程,等等。不妨利用模板总结之。这些模板为我从网上学习后加入自己的理解糅合得来qwq,看了很多的博客,查了很多书籍,其中印象最深的是林夕林夕关于计算几何模板的总结,大家也可以去参考他的应该比我的更详细qwq(不过大佬最近好像出没比较少了) 所以我这个主要还是留着自己参考吧,能帮到他人再好不过了 为了不产生歧义,方便理解,本模板使用笛卡尔坐标系,封装的多是数学中常见的函数。 前置知识:高中数学 文章目录基础声明点向量直线 基础声明 首先,打acm

qq_39561693的博客 1507

修改Windows hosts文件的解决方案

本文主要介绍了修改Windows hosts文件解决方案,希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 安装软件 2.2 修改hosts文件

weixin_43178406的博客 1万+

ACM 计算几何中的精度问题

ACM 计算几何中的精度问题(转) (2013-03-17 16:40:03)转载▼ 标签: 精度 分类: 计算几何 http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了。精度问题则不好说,有时候一个精度问题就可能成为一

wen_xp的专栏 568

IEM模型,地表粗糙度模拟

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算几何问题 java_【转载】ACM计算几何题目推荐

2107 Quoit Design 典型最近点对问题POJ 3714 Raid 变种最近点对问题B,最小包围圆最小包围圆的算法是一种增量算法,期望是O(n)。ZOJ 1450 Minimal CircleHDU 3007 Buried memoryC,旋转卡壳POJ 3608 Bridge Across Islands 旋转卡壳解两...

weixin_32613887的博客 233

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ACM--数学几何--圆环的转动问题--内蒙古14年省赛

1115: Problem E 圆环的转动问题 时间限制: 1 Sec  内存限制: 128 MB 提交: 58  解决: 6 [提交][状态][讨论版] 题目描述   已知圆环有如下特性: 1.一个转动着的圆环会带动与其相切的圆环同时转动。 2.两个相切圆环在切点处不会发生滑动。 开始时,平面上有两个静止的圆环(输入数据保证两个圆不会相交或重合)。 后加一外力,使得第一个圆

戎码人生 1636

ACM 计算几何中的精度问题(转)

http://www.cnblogs.com/acsmile/archive/2011/05/09/2040918.html 计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了。精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,简直“画龙点睛”。这些年的题目基本是朝着越来越不卡精度的方向发展了,但是也不乏一些%^&%题#$%$^,另...

weixin_34392906的博客 90

ACM计算几何中的精度问题(转)

计算几何头疼的地方一般在于代码量大和精度问题,代码量问题只要平时注意积累模板一般就不成问题了。精度问题则不好说,有时候一个精度问题就可能成为一道题的瓶颈,简直“画龙点睛”。这些年的题目基本是朝着越来越不卡精度的方向发展了,但是也不乏一些%^&amp;%题#$%$^,另外有些常识不管题目卡不卡,都是应该知道的。今天我就开膛回顾下见过且还有印象的精度问题,由于本人见识和记忆均有限,望各位大神瞄过后不吝...

QZQ 891

ACM中关于计算几何(浮点数)的精度问题

计算几何的精度问题说到底其实是浮点数的精度问题,但我觉得“计算几何”比“浮点数”更能吸引眼球,所以选了这个标题。 1.浮点数为啥会有精度问题: 浮点数(以C/C++为准),一般用的较多的是float, double。   占字节数 数值范围 十进制精度位数 float 4 ...

xuanweiace的博客 1095

acm题库c语言,C语言acm竞赛习题集锦.doc

C语言acm竞赛习题集锦.doc杭州电子科技大学 acm 习题精选 第 1 页 共 21 页 目录 1、 数塔问题 2 2、 并查集类问题 4 3、 递推类问题 9 4、 动态规划系列 10 5、 概率类题型 13 6、 组合数学类题型 15 7、 贪心策略 16 8、 几何问题 .19 杭州电子科技大学 acm 习题精选 第 2 页 共 21 页 数塔类问题 数塔 Problem Descrip...

weixin_34474759的博客 881

[ACM] hdu You can Solve a Geometry Problem too (线段是否相交及交点个数)

Problem Description Many geometry(几何)problems were designed in the ACM/ICPC. And now, I also prepare a geometry problem for this final exam. According to the experience of many ACMers, geometry probl

逆风的方向 更适合飞翔 1841

ACM计算几何

本文出自:http://blog.youkuaiyun.com/svitter Computational Geometry 计算几何     ACM中基本是最麻烦的部分。     几何代码都要自己写,STL中也没有。基本上。     struct point     数乘,差乘,计算几何题目抄。一个数字由于误差积累造成大。     避免误差。     注意:

svitter的专栏 2410

HNOJ13312注意精度的处理问题和三角形对应的外界圆的圆心交的求法

这题可以用数学几何来处理,即用极角相减就可以得出三角形一个角对应的圆心角,然后枚举是为了处理精度的问题。 当然也是可以用ACM计算几何来做,就是求出三角形的外界圆圆心和半径,然后求出圆心角,然后用gcd求出公约数, 用2*pi除以公约数即可以得出边数,注意四舍五入,另外注意实数的gcd用fmod; 贴出前一种做法的代码; #include #include #include #includ

ONE_PIECE的专栏 688

计算几何列表

ZOJ: [AC]1575 Koch Curve[AC]1010 Area1565 Input1081 Points Within1165 Laser Lines1248 Video Surveillance 1299 Pendulum 1090 The Circumference of the Circle 1271 ...

weixin_30682127的博客 76
上一篇: 神奇的花朵数
下一篇: 福利来了:几何——二维凸包
ColorWaterer
博客等级 码龄12年 16粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值