计算几何与计算几何与....

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 区别与联系 ... 阅读详情

博主这里曾经学过计算几何(下文简称jj),所以没有证明或者说明某些算法,不适合初学者食用

辛普森积分Simpson~

用一道例题及黄学长的代码来理解:
这里写图片描述
黄学长代码~

#include<map>
#include<cmath>
#include<ctime>
#include<queue>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define eps 1e-8
#define pa pair<int,int>
#define ll long long
#define inf 1000000000
using namespace std;
struct P{
    double x, y;
    P(){}
    P(double _x, double _y):x(_x), y(_y){}
    friend P operator-(P a, P b){
        return P(a.x - b.x, a.y - b.y);
    }
    friend double operator*(P a, P b){
        return a.x * b.y - a.y * b.x;
    }
}p[105];
struct L{
    P a, b;
}l[105];
vector<double> ve;
int n;
double R;
void add(double X, L l)
{
    if(l.a.x < X - eps && l.b.x < X - eps)return;
    if(l.a.x > X + eps && l.b.x > X + eps)return;
    if(fabs(X - l.a.x) < eps && fabs(X - l.b.x) < eps)return;
    double t;
    if(fabs(l.b.x - X) < eps)t = l.b.y;
    else t = (X - l.a.x) / (l.b.x - X);    
    ve.push_back(l.a.y + (l.b.y - l.a.y) * t / (t + 1));
}
double F(double X)
{
    if(abs(X) > R)return 0;
    ve.clear();
    for(int i = 1; i <= n; i++)
        add(X, l[i]);
    double U = sqrt(R * R - X * X), ANS = 0;
    sort(ve.begin(), ve.end());
    bool flag = 0;
    for(int i = 0; i < (int)ve.size() - 1; i++)
    {
        flag ^= 1;
        if(ve[i] > U)break;
        if(flag)
            ANS += min(ve[i + 1], U) - ve[i];
    }
    return ANS;
}
double cal(double fl, double fm, double fr, double L)
{
    return (fl + fm * 4 + fr) * L / 6;
}
double simpson(double l, double r, double fl, double fm, double fr, double S, int dep)
{
    double mid = (l + r) / 2;
    double m1 = (l + mid) / 2, m2 = (r + mid) / 2;
    double f1 = F(m1), f2 = F(m2);
    double g1 = cal(fl, f1, fm, mid - l), g2 = cal(fm, f2, fr, r - mid);
    if(fabs(g1 + g2 - S) < 1e-12 && dep >= 10)return g1 + g2;
    return simpson(l, mid, fl, f1, fm, g1, dep + 1) + simpson(mid, r, fm, f2, fr, g2, dep + 1);    
}
double solve(double l, double r)
{
    if(l > r)return 0;
    double mid = (l + r) / 2;
    return simpson(l, r, 0, F(mid), 0, (F(l) + F(r) + F(mid) * 4) * (r - l) / 6, 0);
}
int main()
{
    scanf("%d%lf", &n, &R);
    for(int i = 1; i <= n; i++)
        scanf("%lf%lf", &p[i].x, &p[i].y);
    p[n + 1] = p[1];
    for(int i = 1; i <= n; i++)
        l[i].a = p[i], l[i].b = p[i + 1];
    double ANS = solve(-R, -2) + solve(-2, 1) + solve(1, R);
    printf("%.10lf\n", ANS);
    return 0;
}

也就是说这道题只需要积分求面积就好了,那么为什么这个F函数这么可怕(难以理解)呢?
因为题目说多边形 所以啊,他有可能长这个样:
这里写图片描述
我们再想想我们的积分的本质——把每个x对应的 f(x) f ( x ) 求和 即 ∑nx=1f(x) ∑ x = 1 n f ( x ) 当然我只是这么表示一下方便脑补。也就是说对应到图像上我们要求的是图像内每条竖线的长度的和,举个栗子吧:
这里写图片描述
假设我们要求 f(X) f ( X ) 即粉线处的函数值,那么我们只需要求 L红线+L绿线+L黄线 L 红 线 + L 绿 线 + L 黄 线
这也是黄学长代码的意图,我分步剖析一下:
先说ve数组,这里面存的是x=X与多边形的交点
然后说add:我们枚举每条线段,看是否有交点,及在何处

void add(double X, L l)
{
    if(l.a.x < X - eps && l.b.x < X - eps)return;
    if(l.a.x > X + eps && l.b.x > X + eps)return;
    if(fabs(X - l.a.x) < eps && fabs(X - l.b.x) < eps)return;
    double t;
    if(fabs(l.b.x - X) < eps)t = l.b.y;
    else t = (X - l.a.x) / (l.b.x - X);    
    ve.push_back(l.a.y + (l.b.y - l.a.y) * t / (t + 1));
}

上方的三个return 分别对应 :该线段在X左边,X右边,垂直x轴。这就比较好理解了,因为这三种状况不可以贡献面积(第三种可以用直线的面积为0解释)
然后就是这个点坐标,看图解释吧
这里写图片描述
假设我们要求R的纵坐标 即绿色长度,我们设为 LG L G ,代码中l.a.x,l.a.y,l.a.x,l.b.y与图中 x1,y1,x2,y2 x 1 , y 1 , x 2 , y 2 一一对应;
然后我们做辅助线(米黄色),我们发现上方是两个相似三角形!所以我们利用x的比值来确定 LG−LR L G − L R ,代码中pickline两侧的米黄线比值为t 那么 LG−LR L G − L R = (y2−Y1)∗tt+1 ( y 2 − Y 1 ) ∗ t t + 1 这个不理解的话自己玩两组数据就好了。

扫描线

继续拿题举例子
BZOJ 1845 [Cqoi2005] 三角形面积并
题目大意:给定n个三角形,求面积并 n<=100
怎么做呢?
1.simpson积分,与第一个例题相似,我们可以求交点,然后求f(x)做(比上一个例题还好理解一点)。
2.扫描线
看图233
这里写图片描述
我们对每两条线段的交点打标记,然后过标记点做扫描线。
我们看 第一条扫描线与第二条之间只需要 求一个三角形,而第二三条之间是一个三角加一个梯形,那我们就可以用梯形公式求积啦~

S=12∑i(上底i+下底i)∗h S = 1 2 ∑ i ( 上 底 i + 下 底 i ) ∗ h

=h2∑i(上底+下底) = h 2 ∑ i ( 上 底 + 下 底 )

我们只需要特判一下平行x轴的边,因为它有可能无贡献(留个读者考虑)
或者用中位线考虑(比较繁琐)

旋转卡壳

首先说一下读音(毕竟有 24 2 4 种读法),xuan zhuan qia ke (音调:2 3 3 2
http://blog.youkuaiyun.com/wang_heng199/article/details/74477738
这篇博客讲的真的好,不用我xbb了~
UPD:抱歉我没看到该文章是转载的,原文地址404 not found了

计算几何算法概览 计算几何算法概览原创:怒火之袍 2003年5月17日 计算几何常用算法概览本站原创:怒火之袍一、引言    计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域, 阅读详情

相关推荐

计算几何全家桶

超全的计算几何

BUG_Creater_jie的博客 4057

【QBXT】学习笔记——Day13计算几何

啊,计算几何好难啊。 估计今天要爆炸了,写一堆笔记。 虽然计算几何在OI里应该考得不多,不过还是要看一看0.0 Day13 1.27AM 首先是一些注意事项。 对于scanf/printf来说,long double 类型不能直接读入,要用%lf读入double,然后再将double的变量赋值给long double的变量。输出也不能直接输出(windows下是不能的)ldb实际情况

MEET YOU FIRST TIME 570

计算几何常用算法概览

相关内容: 判段点是否在多边形内实现树结构的类CTree一、引言计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。 作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸 多领域有着十分重要的应用

老李 1万+

计算几何VS解析几何

解析几何是用代数的方法去解决问题,虽然不是为一种好的思路,但是很多时候需要付出昂贵的代价,比如精度!   而计算几何更多的是从几何角度,用向量的方法避免了这一尴尬的现象! 判断两线段相交,任一线段的端点在另一线段的两边(这是规范相交)! 判断一侧可以考虑用斜率的方式,进而转化成叉积的形式!  然后对于一个平行四边形的两临边的向量叉积又和有向面积相同! 从二维叉积然后又上升到三维叉积……  

站稳脚跟学做人! 1853

【几何专题】计算几何基础

整理的算法模板合集: ACM模板 目录AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换)AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系) AcWing 2984. 线段 / POJ3304(计算几何、常用技巧转换) 常用技巧转换,寻找一个直线旋转 我们发现如果可以找到一个直线与所有的线段都相交,那么我们做一个垂直这个直线的垂线,所有的线段的投影一定都交于这个直线与垂线的垂足处,我们可以很轻松地画图验证这一定理。 所

繁凡さん的博客 970

Cygwin安装教程

简介 cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件 Cygwin就是一个windows软件,该软件就是在windows上仿真linux操作系统 简言之,cygwin是一个在windows平台上运行的 linux模拟环境,使用一个Dll(动态链接库)来实现 这样,我们可以开发出Cygwin下的UNIX工具,使用这个DLL运行在W...

Errol's Blog 13万+

蓝桥杯--图及其它(二)

例5【油漆面积】(线段树) X星球的一批考古机器人正在一片废墟上考古。 该区域的地面坚硬如石、平整如镜。 管理人员为方便,建立了标准的直角坐标系。 每个机器人都各有特长、身怀绝技。它们感兴趣的内容也不相同。 经过各种测量,每个机器人都会报告一个或多个矩形区域,作为优先考古的区域。 矩形的表示格式为(x1,y1,x2,y2),代表矩形的两个对角点坐标。 为了醒目,总部要求对所有机器人选中的...

Nibaby 577

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 407

hrbust 1304 13哥的机器人

叉积的基础应用。 今天花了半个小时终于分清楚点积叉积了。。。。 没坑点。。。水。。 13哥的机器人 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 401(140 users) Total Accepted: 153(122 users) Rating:

爱梦者的心之旅 331

【解决问题】‘vue‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

【解决问题】'vue' 不是内部或外部命令,也不是可运行的程序或批处理文件。

weixin_44566194的博客 4万+

工作中SVN的使用,保姆级教程!

SVN是一款集中式版本控制系统,采用客户端-服务器模式管理代码版本。与Git相比,SVN在目录权限控制、大型二进制文件处理等方面具有优势,适合特定场景使用。本文介绍了SVN的安装方法、基本操作(检出、提交、更新、回滚等)以及分支管理(创建、合并、切换)。同时讲解了文件冲突的解决方法,并演示了如何在IDEA中集成SVN工具。SVN虽然逐渐被Git取代,但在某些特定场景下仍是可靠选择,工具选择应基于团队和项目需求。

胜人者有力,自胜者强! 1851

计算几何

OI中少有的以高中知识为主的版块。 1.高中计算几何基础知识 2.深刻的认识到计算几何用向量而不用解析几何。 3.图形的记录 (1):点,向量。这两个是差不多的。 (2):线:直线上一点和直线的方向向量。 (3):线段:只需要记录左右端点即可。。。。 4.正弦定理: aSinA=bSinB=cSinC=2R\frac {a}{Sin A} = \frac {b}{SinB}=\frac c{Sin...

Freopen的博客 1万+

动态刷新曲线_【GhPython应用】利用反射刷新Image sampler组件

【版权声明】| 作者:月之眼|案例图片来源:Sergiu Radu Pop的facebook| 如有侵权,请联系大水牛平台|如果觉得文章不错,欢迎分享效果展示利用python刷新Image sampler组件,主要的思路就是X输入端:输入要切换的图片路径,我的案例中输入了9张图片。然后通过100毫秒切换一张图片显示,来达到动态显示效果。代码分析run输入端类型:bool (I...

weixin_42393829的博客 531

计算几何总结

计算几何总结 一、精度控制 计算几何经常牵扯到浮点数的运算,所以就会产生精度误差,因此我们需要设置一个eps(偏差值),一般取1e-7到1e-10之间,并用下面的函数控制精度。 const double eps=1e-8; int dcmp(double x) { if (fabs(x)<eps) return 0; else return x<0?-1:1; }二、向量

clover_hxy的博客 1万+

MySQL常见面试题汇总(建议收藏!!!)

目录一、索引相关(1)什么是索引?(2)索引是个什么样的数据结构呢?(3)为什么使用索引?(4)Innodb为什么要用自增id作为主键?(5)Hash 索引和 B+ 树索引有什么区别或者说优劣呢?(6)什么是聚簇索引(6)非聚簇索引一定会回表查询吗?(6)聚簇索引和非聚簇索引的区别(6)MyISAM和InnoDB实现B+树索引方式的区别是什么?(6)MySQL中有四种索引类型,可以简单说说吗?(6)覆盖索引是什么?(6)联合索引是什么?为什么需要注意联合索引中的顺序?(6)创建的索引有没有被使用到?或者说怎

蔡政洁的博客 7万+

Ultralytics 框架中predict 与 track 的区别

在 Ultralytics 框架中,predict 和 track 是两种不同的推理方法,分别用于目标检测(或分割、姿态估计)和目标跟踪任务。

浩瀚之水的专栏 1126

计算几何系列——XCPC中计算几何一些题型杂谈(上)

这样一画,那么这题的模型就出来了,大致的一个思路就是把点的一个圆周顺序排列出来,这里需要一个排序操作,然后建立点与点之间的一个距离关系,这些距离关系构成了一个边集,然后我们对这个边集跑一遍最短路即可。那么难点在哪里呢?

Zz_0913的博客 1634

SerDes系列之如何选择AC耦合电容

交流耦合电容用于隔离PCB互连时的直流分量(Common-mode voltage),同时传递交流分量(Voltage swing),其作用类似于一个高通滤波器,但是,如果电容容值选取不当,使用过程中会产生信号质量问题,典型的应用场景:当包含相同的长串1或0的NRZ数据应用于该高通滤波器时,会发生低频电压跌落,导致低频模式相关抖动(PDJ)。

一只豌豆象的博客 2350

[基础]计算几何

一、引言  计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简单的通用解决方案,比如几何问题。作为计算机科学的一个分支,计算几何主要研究解决几何问题的算法。在现代工程和数学领域,计算几何在图形学、机器人技术、超大规模集成电路设计和统计等诸多领域有着十分重要的应用。在本文中,我们将对计算几何常用的基本算法做一个全面的介绍,希望对您了解

outer of the space 2293

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

探索计算几何的魅力:开源书籍《计算几何算法与应用》pdf下载指南

探索计算几何的魅力:开源书籍《计算几何算法与应用》pdf下载指南 去发现同类优质开源项目:https://gitcode.com/ 项目核心功能/场景 提供经典计算几何书籍《计算几何算法与应用》的pdf下载,助力学术研究。 项目介绍 在计算机科学和数学领域中,计算几何是一个极为重要的分支。它不仅涉及几何形状的基本理论,还包括如何设计和分析算法来处理几何问题。今天,我们要介绍的是一个开源项目,它提供...

gitblog_06777的博客 810

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

计算几何系列 ——— 一切的开始

所有的游戏都有共性,多半免不了几何算法、图形、动画、渲染、UI等等,把这些通用的东西打包起来就形成了游戏引擎,如Unity3D、UE、Cocos等,游戏公司借助它们的力量便可以简化工作,从而专注于游戏内容制作。其他如机器人学中的寻路算法、分子建模领域的碰撞计算、以及邓俊辉老师课程中讲的“颜料勾兑问题”等等,对于其应用广泛性的总结借用Mark原话——“乍看起来,虽然某些领域似乎与几何风马牛不相及,然而它们同样可以借助几何算法而受益。换句话说,计算几何更像是算法的一个分支,而非几何学的分支。

Zz_0913的博客 3082

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算几何系列——XCPC中计算几何一些题型杂谈(中)

在XCPC中有一种题叫计算几何,这类题在大多数时候都作为一类金牌题甚至防AK题的难度出现,但是在前段时间我写了许多学习计算几何的博客,会发现计算几何的知识体系十分独立且庞大,而且板子很长,就是一个特点:毒瘤。 所以,在这里,我作为一个主修计算几何的ACMer,做了一点点题后对这类毒瘤题做出了一定的总结,希望对大家能有所帮助。 首先,计算几何的题目并非全是难题,它也有一个难度梯度,我这边将其分为差不多三类题: 1.一般的平面几何知识的运用,一般这类题难度较低,需要掌握基本的几何知

Zz_0913的博客 1366

【计算几何】【计算几何模板】【持续更新】

必须学计算几何了…… muba

退役狗的专栏 960

ACM模块解析之 计算几何

计算几何一.简介计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往往题目描述还常为英文,所以还是需要一定的题量支撑,来判断具体考察的是什么。 二.题型分类下列仅为一部分,可与《算法与实现》第三章计算几何互相补充。1.点判断点是否在多边形中★★平面最近点对/最远点对★曼哈顿距离点集的有序化(...

popcjz的博客 1073
上一篇: 费用流与对偶图
下一篇: 字符串思密达
RustSword_RWZ
博客等级 码龄10年 6粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值