几何 - 二维几何基础
几何 - 二维几何基础
繁凡さん
只想当个小透明,就图一乐^q^,希望可以做出一些微小的贡献(目前研究方向:自然语言处理、深度学习中的对抗攻击、元学习,欢迎大佬们来与我交流^0^)
展开
-
【几何专题】计算几何基础
整理的算法模板合集: ACM模板目录AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)常用技巧转换,寻找一个直线旋转我们发现如果可以找到一个直线与所有的线段都相交,那么我们做一个垂直这个直线的垂线,所有的线段的投影一定都交于这个直线与垂线的垂足处,我们可以很轻松地画图验证这一定理。所原创 2020-12-27 00:12:29 · 608 阅读 · 0 评论 -
模板 - 计算几何相关公式大全
一、注意事项注意舍入方式(0.5的舍入方向);防止输出-0.几何题注意多测试不对称数据.整数几何注意xmult和dmult是否会出界; 符点几何注意eps的使用.避免使用斜率;注意除数是否会为0.公式一定要化简后再代入.判断同一个2∗PI2*PI2∗PI域内两角度差应该是abs(a1−a2)<beta∣∣abs(a1−a2)>pi+pi−beta;abs(a1-a2)<beta||abs(a1-a2)>pi+pi-beta;abs(a1−a2)<beta∣∣原创 2020-09-29 21:02:24 · 1003 阅读 · 0 评论 -
模板 -计算几何注意事项
整理的算法模板合集: ACM模板目录计算误差解决方案 : 误差判别法解决方案:化浮为整注意负零注意反三角函数的值域计算几何常用开头模板计算误差尽量少用三角函数、除法、开方、求幂、取对数运算如:1.0/2.0∗3.0/4.0∗5.0=(1.0∗3.0∗5.0)/(2.0∗4.0)1.0/2.0*3.0/4.0*5.0 = (1.0*3.0*5.0)/(2.0*4.0)1.0/2.0∗3.0/4.0∗5.0=(1.0∗3.0∗5.0)/(2.0∗4.0)在不溢出的情况下将除式比较转化为乘式比较a原创 2020-09-28 16:29:16 · 765 阅读 · 0 评论 -
AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)
常用技巧转换,寻找一个直线旋转我们发现如果可以找到一个直线与所有的线段都相交,那么我们做一个垂直这个直线的垂线,所有的线段的投影一定都交于这个直线与垂线的垂足处,我们可以很轻松地画图验证这一定理。所以现在问题就变成了找一个可以穿过所有线段的直线。我们肯定不能暴力找所有的坐标判断是否相交。这里我们使用一个计算几何常用的技巧:我们发现所有可能的答案,至少从与一个线段有交点开始。所以我们可以先找一个过一个线段的直线,然后我们旋转他(传统艺能)。我们把这个直线的定点定为这个线段的端点,然后旋转。因为我们.原创 2020-12-12 22:34:07 · 292 阅读 · 0 评论 -
AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)
计算几何基础题题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球。我们首先考虑暴力。我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x的所有隔板都在小球坐标的左边,所有大于x的隔板都在小球坐标的右边,所以我们可以暴力n2n^2n2枚举每个小球的坐标,判断有多少个隔板(线段)在小球的左边,个数就是答案(区域从0到n)。数据5000,10组数据,n2n^2n2暴力数据达到了2∗1082*10^{8}2∗108,2亿,不可过,所以我们考虑优化。.原创 2020-12-12 17:47:41 · 244 阅读 · 0 评论 -
UVA11817 Tunnelling the Earth(计算几何、经纬度转空间坐标、球面距离)
整理的算法模板合集: ACM模板题目大意:以经纬度形式给出地球(当作一个球)上两个点,求这类的最短弧线距离和两点直线距离之差(四舍五入),假设地球半径为:6371009米照着训练指南上的模板打就好。#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<cmath>#include<iostream>using na原创 2020-11-15 22:42:15 · 337 阅读 · 0 评论 -
UVA11646 Athletics Track(计算几何、弧长公式)
整理的算法模板合集: ACM模板题目大意:一个体育场一圈是400米,其中弯道时两端半径相同的圆弧,已知矩形的长和宽的比例,求长和宽的具体长度。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<cmath>using namespace std;const int N = 1000007;typedef long l原创 2020-11-15 22:07:33 · 407 阅读 · 0 评论 -
UVA11437 Triangle Fun(相似三角形,做辅助线求解相似比例)
其实我们根据样例打表就可以发现比例是7hhh…#include<cstdio>#include<algorithm>#include<cstring>#include<vector>#include<cmath>#include<iostream>using namespace std;typedef long long ll;const int N = 50007, M = 500007, INF = 0x3f..原创 2020-11-15 21:18:44 · 213 阅读 · 0 评论 -
【动态规划、计算几何】最优三角剖分
最优三角剖分问题描述:给一个有n个顶点的凸多边形,有很多方法进行三角剖分(polygon triangulation) 。给每个三角形规定一个权函数w(i,j,k)w(i,j,k)w(i,j,k)(比如三角形的周长或者三顶点的权和或者三角形的面积等等),求让所有三角形权和最大的方案。 这个问题的关键在于状态的定义,因为如果允许随意切割,显然任意“半成品” 多边形的各个顶点可以是原多边形中随意选取的,很难简洁的定义成状态。但我们又可以发现,对于同一种切割方法,我们可以有多种切割顺序,但切割方法就已经决原创 2020-10-22 17:59:15 · 1120 阅读 · 0 评论 -
2019 ICPC Asia Nanjing Regional K.Triangle(求一个能将三角形分成两个面积相同的线段、计算几何)
整理的算法模板合集: ACM模板K.Triangle用板子判断点是否在线段上即可。紫书的板子有点问题,判断是否在线段上的时候应该是<=才能A,书上是 < …对于第二问我们先特判一下特殊的情况,也就是p点在三角形端点的时候答案就是端点对边的中点。然后我们用一个直线玩一下三角形就发现,从特殊的情况(端点到对边中点)出发,我们假设端点是A,当p点在线段AB上的时候,若P点靠近A点,那么我们的直线就会转到靠近B点,当P点靠近B点的时候,我们的直线就会转到靠近C点,因为情况不定,所以我们可以将原创 2020-10-08 20:28:38 · 363 阅读 · 0 评论 -
UVA1342 That Nice Euler Circuit(ACM - ICPC 2004 Asia - Shanghai)(计算几何、欧拉定理)
欧拉定理:设平面图的顶点数、边数和面数分别为V,E,F,则V+F-E=2。#include<bits/stdc++.h>using namespace std;const int N = 5007, M = 50007, INF = 0x3f3f3f3f;const double DINF = 12345678910, eps = 1e-10;struct Point{ double x, y; Point(double x = 0, double y = 0):.原创 2020-09-27 20:50:58 · 229 阅读 · 1 评论 -
二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)
整理的算法模板合集: ACM模板目录基本运算点与直线多边形基本运算#include<bits/stdc++.h>using namespace std;const int N = 5007, M = 50007, INF = 0x3f3f3f3f;const double DINF = 12345678910, eps = 1e-10;struct Point{ double x, y; Point(double x = 0, double y = 0):x(x原创 2020-09-27 19:18:50 · 6681 阅读 · 8 评论 -
【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)
要求D点我们只需要把直线BC向左旋转a/3,向右旋转b/3得到两直线求交点即可。秒啊秒啊解锁技能树——计算几何,终于能加一个计算几何版块了#include<bits/stdc++.h>using namespace std;const int N = 5007, M = 50007, INF = 0x3f3f3f3f;const double DINF = 12345678910, eps = 1e-10;struct Point{ double x, y; ..原创 2020-09-27 18:13:55 · 234 阅读 · 0 评论