计算几何学习小记

文章目录

    • 前言
  • 正题
    • 平面运算
        • 加减
        • 乘积
      • 常见问题
        • 直线/线段规范交点
        • 求垂线/点问题
        • 判断点在多边形的内/外
        • 求两个圆的交点

前言

因为懒得画图理解计算几何所以要来这里鼓励一下自己
以后新学的应该也会写在这里。就当我是水博客
应该都是二维的计算几何,三维的有生之年再学
公式用的不规范,感性理解的


正题


平面运算

定义两个向量a⃗=(xa,ya),b⃗=(xb,yb)\vec{a}=(x_a,y_a),\vec{b}=(x_b,y_b)a=(xa,ya),b=(xb,yb)
下方为了方便不一定会加→\rightarrow

加减

向量加法遵循平行四边形定则,a⃗+b⃗=c⃗\vec a+\vec b=\vec ca+b=c
满足xc=xa+xb,yc=ya+ybx_c=x_a+x_b,y_c=y_a+y_bxc=xa+xb,yc=ya+yb
向量减法遵循三角形定则,a⃗−b⃗=c⃗\vec a-\vec b=\vec cab=c
满足xc=xa−xb,yc=ya−ybx_c=x_a-x_b,y_c=y_a-y_bxc=xaxb,yc=yayb
图里a−b⃗\vec{a-b}ab的方向反了/kk
在这里插入图片描述

乘积

定义∣a∣|a|a表示aaa的模长,表示向量aaa的无向长度,而aaa的模定义为有向长度
定义a∗ba*bab表示aaabbb点积,是bbb投影到aaa上的向量模乘上向量aaa的模。实数a∗b=xaxb+yayba*b=x_ax_b+y_ay_bab=xaxb+yayb
在这里插入图片描述

(为了清楚我将红色线下移了一格),点积就是红色的长度乘上蓝色的长度

一般的时候点积用于判断两条直线的正反,如果两条直线方向相同则点积为正否则为负。

定义a×ba\times ba×b表示aaabbb叉积,是向量a,ba,ba,b围成的平行四边形的有向面积。实数a×b=xayb−xbyaa\times b=x_ay_b-x_by_aa×b=xaybxbya
在这里插入图片描述
如图所示的平行四边形的有向面积就是a×ba\times ba×b
一般用于求多边形的面积或者判断一条直线在另一条直线的左侧还是右侧。

常见问题

直线/线段规范交点

询问两条直线a:(sa,ta)a:(s_a,t_a)a:(sa,ta)b:(sb,tb)b:(s_b,t_b)b:(sb,tb)交点时(我们用向量形式表示点坐标,再以直线上两个点表示直线)。
考虑使用面积法
在这里插入图片描述

如图,我们使用叉积计算由直线aaa分开的两个三角形的面积S1,S2S1,S2S1,S2
那么SO:OT=S1:S2SO:OT=S1:S2SO:OT=S1:S2然后我们又知道STSTST的线段信息就可以求出点坐标OOO的位置。

如果询问的是线段与直线的,我们加上一个叉积判断线段是否在直线的两端即可。

如果询问线段与线段的,我们就直接分别把两条线视为直线/线段进行上面的判断即可。

求垂线/点问题

给出直线lll和直线外一点PPP求它与直线lll的垂点/线

考虑点积
在这里插入图片描述
因为SP⃗∗ST⃗=SO∗ST\vec{SP}*\vec{ST}=SO*STSPST=SOST然后除以ST2ST^2ST2我们就可以得到SO:STSO:STSO:ST然后缩短STSTST一定距离就可以得到OOO点了。

当然如果只是求垂线长度的话直接用面积法也行。

判断点在多边形的内/外

第一种方法就是射线法,该点随机向一个方向射线,如果与奇数条边相交则在内,否则在外。当然这种可能会遇到的包括但不限于以下神奇情况
在这里插入图片描述
当然听大佬说遇到这种情况重新换个方向拉射线就好了(?
特点是运算快,精度高但是特殊情况较多

第二种方法是转角法,该点开始的射线依次转过多边形的每个顶点,如果转回来之后经过了一个圈,那么就在多边形内,否则不在
在这里插入图片描述
特点是比较通用

求两个圆的交点

在这里插入图片描述
根据余弦定理我们有CB2=AC2+AB2−2AC∗AB∗cos∠CABCB^2=AC^2+AB^2-2AC*AB*cos\angle CABCB2=AC2+AB22ACABcosCAB
解出cos∠CABcos\angle CABcosCAB然后用atan2atan2atan2函数算出级角再算出方位角即可


待更新懒得更新了,计算几何爬出OI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net Core SignalR 用泛型Hub优雅的调用前端方法及传参

继续学习最近一直在使用Asp.Net Core SignalR(下面成SignalR Core)为小程序提供websocket支持,前端时间也发了一个学习笔记,在使用过程中稍微看了下它的源码,不得不说微软现在真的强大,很多事情都帮你考虑到了,比如使用Redis,使用Redis后,你的websocket就支持横向扩…

Network POJ-3694

Network POJ-3694 文章目录Description题意:样例分析:题解:代码:Description A network administrator manages a large network. The network consists of N computers and M links between pairs of computers. Any pair of com…

使用.NET Core 2.1的Azure WebJobs

WebJobs不是Azure和.NET中的新事物。 Visual Studio 2017中甚至还有一个默认的Azure WebJob模板,用于完整的.NET Framework。 但是,Visual Studio中以某种方式遗漏了.NET Core中WebJobs的类似模板。 在这篇文章中,我使用的是.NET Core 2.1来创…

.NET Core中的CSV解析库

感谢本篇首先特别感谢从此启程兄的《.NetCore外国一些高质量博客分享》, 发现很多国外的.NET Core技术博客资源, 我会不定期从中选择一些有意思的文章翻译总结一下。.NET Core中的CSV解析库本篇博客来源于.NET Core Totorials的《CSV Parsing In .NET Core》。背景介绍对于初级…

为什么要使用Entity Framework

本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF),同时也看出类似Drapper之类的简陋ORM不足的地方。设想业务都是大家知晓的权限管理,实体类如下。读到这里,请先思考一下&…

Tarjan算法

Tarjan算法可以应用在求解 强连通分量,缩点,桥,割点,双连通分量,LCA等 关于文章目录强连通分量代码题目tarjan求割点割点概念流程代码:求无向图的割边/桥理解:代码:强连通…

Ocelot简易教程(一)之Ocelot是什么

简单的说Ocelot是一个用.NET Core实现并且开源的API网关技术。可能你又要问了,什么是API网关技术呢?Ocelot又有什么特别呢?我们又该如何集成到我们的asp.net core程序中呢?下面我会通过一些列通俗易懂的教程来为大家讲解。今天的这…

如何在你的项目中集成 CAP【手把手视频教程】

前言之前录制过一期关于CAP的视频,但是由于当时是直播时录制的视频,背景音比较杂所以质量有点差。这次的视频没有直播,直接录制的,视频质量会好很多,第一遍录制完成之后发现播放到一半没有声音,所以又重新录…

【Splay】文艺平衡树(金牌导航 Splay-2)

#文艺平衡树 金牌导航 Splay-2 题目大意 给你一个1~n的序列,然后对序列的区间做若干次翻转,问你最后的序列 输入样例 5 3 1 3 1 3 1 4输出样例 4 3 2 1 5数据范围 1⩽n,m⩽105,1⩽l⩽r⩽n1\leqslant n,m\leqslant 10^5,1\leqslant l\leqslant r \l…

.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

前言本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替。但是为了说明调度任务使用实现也坚持写了下。后面会一篇针对架构、实现优化的讲解。源码地址&a…

Drainage Ditches POJ1273

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 93263 Accepted: 36174试题链接 文章目录Description题意:题解:代码:Dinic做法EK做法Description Every time it rains on Farmer John’s fields, a pond forms over Bessie’…

P2756 飞行员配对方案问题【网络流24题】

P2756 飞行员配对方案问题 文章目录题目背景题解:代码:题目背景 第二次世界大战期间,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的两名飞行员,其中一名是英国…

大数据分析中使用关系型数据库的关键点

相当一部分大数据分析处理的原始数据来自关系型数据库,处理结果也存放在关系型数据库中。原因在于超过99%的软件系统采用传统的关系型数据库,大家对它们很熟悉,用起来得心应手。在我们正式的大数据团队,数仓(数据仓库H…

图论复习——最小生成树MST

知识点 MST的构造 Boruvka算法常用于解决这类问题:给你n个点,每个点有点权,任意两个点之间有边权,边权为两个点权用过某种计算方式得出,求最小生成树。动图 MST上的确定性和存在性问题 最小生成树的两个性质&#xf…

Ocelot简易教程(二)之快速开始1

Ocelot是为.net core量身定做的,目前是基于 netstandard2.0进行构建的。.NET Core 2.1中如何使用呢?安装NuGet package使用nuget安装Ocelot及其依赖项。您需要创建一个netstandard2.0项目并将其Package安装到项目中。然后按照下面的“启动”和“ 配置”节…

P2761 软件补丁问题

文章目录题目描述题解:代码:添加链接描述题目描述 T 公司发现其研制的一个软件中有 n 个错误,随即为该软件发放了一批共 m 个补丁程序。每一个补丁程序都有其特定的适用环境,某个补丁只有在软件中包含某些错误而同时又不包含另一些…

Xamarin中国技术社区及BXUG官网上线啦

Xamarin中国技术社区及BXUG官网为.NET开发者提供移动跨平台技术学习的园地,为Xamarin及.NET技术达人提供展示分享的舞台, 为企业CTO等技术负责人提供跨平台移动应用解决方案的交流平台!网址链接:http://bxug.bopoda.cn/Xamarin中国…

用python将图片转换成二值图像

大创项目是图像识别,第一个任务是将一个图片转换成二值图像 之前用过python的numpy和turtle,这次要用到图像库PIL的类Image,也算是刚刚从零开始学起 整体效果(用01串表示图像) 原理很简单:将图片中黑色…

.Net Core SignalR 初体验

前言Asp.Net SignalR已经出来很久了,但是一直没有静下心来好好看看。昨天花了几个小时的时间看了下。首先借鉴了官方文档,如何搭建一个SignalR的Demo。参考文章:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/signalr?viewaspnet…

CF1251F-Red-White Fence【NTT】

前言 刚开始看错题推了半天的生成函数 正题 题目链接:https://www.luogu.com.cn/problem/CF1251F 题目大意 nnn个白色木板,kkk个红色木板,给出这些木板的高度,木板排成一排形成栅栏。栅栏要求只有一个红色木板且在红色木板左边单调升&…