`算法知识` 笛卡尔坐标系, 边长与边权, 曼哈顿距离, 欧几里得距离,外接矩形
catalog
- 图像引用
- 图一
- 图二
- 笛卡尔坐标系的(边长)与(边权)
- 曼哈顿距离
- (曼哈顿边权)与(欧几里得距离)的转换
- (凸多边形的曼哈顿周长)与(外接矩形的欧几里得周长)
- 例题
ID_COUNT: 4
(跳转链接已经使用了{0, ..., ID_COUNT - 1}
)
图像引用
图一
图二
笛卡尔坐标系的(边长)与(边权)
笛卡尔坐标系中, 任意两点 比如(1,1) (2,2)
, 他们之间的距离dist
(即两点的连线), 一定是固定的 定死了的, 是任何人都不可以修改的;
… 这里说的 (两点间的 距离) , 不是用户所能定义的, 而是 (相对于坐标系)的距离, 即: 线段在坐标系里的长度
因为直角坐标系中, 两点的连线距离为: 欧几里得距离, 因此 dist=2dist = \sqrt{2}dist=2
… 因为在实际问题(比如几何)中, 通常两点的连线, 就对应为多边形的(边长), 我们这里称: (两点间的连线距离dist
)为: 边长
由于两点的边长 在 直角坐标系里, 是(固定死的);
因此, 如果用户要自定义 (两点的距离), 比如上面的(1, 1), (2,2)
就规定他俩的距离为(1+2) - (1+2) = 0
,
其实这个距离, 称为 (权值wth
), 即(边权)
有些题, 会直接说: 对于两点(x1, y1) (x2,y2)
, 我们规定其距离为 关于x1,y1,x2,y2的式子
其实这种说法不是太准确…
因为点坐标是(直角坐标), 说明是在(直角坐标系)里; 那么, 两个点的距离(边长) 是固定死的, 就是(欧几里得距离)
… 但是, 题目非要说是: 定义(边长)为…, 个人感觉不太严谨, 但我们心里要知道, 其实它所定义距离, 叫做(边权), 不是(边长)
见图二
任何一个多边形 都存在 唯一的 外接矩形 : 满足 使该多边形处在外接矩形的内部, 且外接矩形最小 (这个小, 可以是周长或面积, 下面会讲到)
图中的8边形(黑色) 的外接矩形为 (绿色矩形).
虽然图中是个凸多边形, 实际上, 对凹多边形也适用, 只要是多边形 都存在 其唯一的(外接矩形)
… 具体的, (求一个多边形的外接矩形的算法) 为: 假设外接矩阵坐标为L, R, U, D
… (LR为矩阵左/右侧边的横坐标, UD为矩阵上/下侧边的纵坐标)
… 令X
为多边形所有顶点的横坐标集合X = {x1, x2, ...}
, Y为所有顶点的纵坐标
… 则, L = min( X), R = max( X), D = min( Y) U = max( Y)
… 这个算法看起来很简单, 需要牢记住
此时, 这个外接矩形 是有 L, R, U, D
四个数值来表示, 还有一种方式, 来表示这个 外接矩阵
其实和上面的方式差不多, 上面是得到L, R, U, D
四个数值, 而这四个值 每个值都来源于一个点
比如, 上图中, L 来自于 A点
, U 来自 B点
, R 来自 E点
D 来自 H点
, 我们就以A, B, E, H
这 四个点 来表示外接矩形
表示, A.x, B.y, E.x, H,y
为 L, U, R, D
即外接矩形的四条边的坐标
即, 获得四个点, 记作Vl, Vu, Vr, Vd
(V为Vertice), 满足: Vl.x = L, Vu.y = U, Vr.x = R, Vd.y = D
(LURD和上面一样)
在上图中, Vl = A, Vu = B, Vr = E, Vd = H
; 其实和上面表示法差不多;
… 假如, 有多个点 在外接矩形的一条边上, 则取任意一个点即可;
… 比如, 假如G 和 H
都在那条绿色边上, 则你选G, H
都可以, 因为, 只要保证G/H . y = D
即可, 我们只关注其(y坐标), x坐标无所谓
但是要注意, 此时, 这4个点 可能会有重复的!!!
比如, 你想象下, 将A点 移动到 绿色矩形的(左上角), 将 E点 移动到 绿色矩形的(右下角)
然后, 将所有的点, 都放到 绿色矩形的(内部), 不能在边上;
那么, 此时, Vl 和 Vu
表示的点 都是A
, Vr, Vd
表示的点 都是E
;
因此下面这种表示外接矩形的方式, 就是为了引入这个知识
即, 多边形的 (2/3/4)个点 可以确定 其外接矩形, 所谓(确定), 就是确定外接矩形的形态/坐标等信息.
… 在外接矩形上即不在矩形内部
的 (多边形点) 可能很多> 4
个
… 但是, 只需要最多4个点 就可以确定 外接矩形的形态;
一个N边形
… 如果用2个点可以确定外接矩形, 则说明: 这两个(多边形的点) 位于 (外接矩形)的对角线的两个顶点
… 如果用3个点可以确定外接矩形, 则说明: 某一个(多边形的点) 位于 (外接矩形)的某个顶点
… 然后另外两个(多边形的点), 位于 (外接矩形)的两条边上不在外接矩阵的顶点
)
… 否则, 用4个点可以确定外接矩形, 则说明: 这4个(多边形的点) 均位于 (外接矩形)的四条边上 不在外接矩形的顶点
曼哈顿距离
个人认为, 叫做(曼哈顿距离), 也不太严谨…
因为如果是在(直角坐标系)里, 两点的距离, 一定是欧几里得距离, 不可能是曼哈顿距离;
… (欧几里得距离, 有欧几里得空间 `笛卡尔坐标系就是欧几里得空间); (而, 曼哈顿距离, 貌似没有曼哈顿空间…)
即, 其实是 (定义两点间的边权为: 曼哈顿距离);
所以, 我们以下, 不会称呼 两点间的曼哈顿距离为…, 而是称之为 两点间的曼哈顿边权为…
(曼哈顿边权)与(欧几里得距离)的转换
见图一
曼哈顿边权的 三角形法则
定义Manh( a, b)
为: ab
两点的 曼哈顿边权
则对于一个三角形ABC
(AB为斜边), 有: Manh( A, B) = Manh( A, C) + Manh( C, B)
… 这与(欧几里得距离)不同, 欧几里得是(平方的关系 ab^2 = ac^2 + cb^2
), 而曼哈顿边权是直接相加
曼哈顿边权的 平行法则
如果AB
两点 连线是平行于(X或Y轴), 其实也就是AB
的X坐标或Y坐标 是相同的, 则 AB
的曼哈顿边权 等于 AB
边长(即欧几里得距离)
这两个法则, 会导致下面的结论:
在直角坐标系中, 任意线段AB的(曼哈顿边权), 等于 两条线段AC, CB
的边长 之和
… 其中, 这两条线段AC, CB
, 必须是AB
线段对应的直角三角形的两个直角边; 且AC, CB
要么平行于X轴, 要么平行Y轴
以上图为例, AB两点的曼哈顿边权=AC边长+CB边长AB两点的曼哈顿边权 = AC边长 + CB边长AB两点的曼哈顿边权=AC边长+CB边长
这个性质非常重要, 是(曼哈顿边权) 与 (欧几里得距离)的等价关系, 经常会用到两者的转换
(凸多边形的曼哈顿周长)与(外接矩形的欧几里得周长)
见图二
需要前置知识, 需要回顾 多边形的外接矩形 和 (曼哈顿边权)与(欧几里得距离)的转换
定义: 两点的(边权)为: 曼哈顿距离; 定义, 一个多边形的周长为: 所有(边权)之和;
那么, 我们要求一个 凸多边形 的 边权周长; (也就是: 曼哈顿周长)
它自然等于 (N个边的 边权之和), 也就是 一堆 曼哈顿距离的公式|x1 - x2| + |y1 - y2|
假如要 通过预处理 优化为O(1)
来求解 一个凸多边形的 曼哈顿周长
去研究(这堆曼哈顿公式) 是徒劳的, 因为, 不管怎么简化, 里面也是有N
个X坐标 和 N
个Y坐标, 不可能优化到O(1)
这就用到了, (曼哈顿边权) 与 (欧几里得边长) 的转换;
你先将每个(曼哈顿边权), 替换为: 两个 (欧几里得边长); 也就是替换为图中的(红色边)
… 然后, 将(红色边) 通过平移 到 绿色的外接矩形上,
… 你会发现, 所有红色边 的边长 等于 绿色矩形的周长
但它只适应于(凸多边形), 对于(凹多边形) 并不成立!! 你可以去证明
即, 多边形的曼哈顿周长 等于 其外接矩形的欧几里得周长
例题
`算法知识` 笛卡尔坐标系, 边长与边权, 曼哈顿距离, 欧几里得距离,外接矩形相关推荐
- 在GDI+中如何实现以左下角为原点的笛卡尔坐标系
今天写了一个求点集合的凸包的一个算法,虽然结果求解出来了,但是想将过程用GDI+绘制出来,就需要将点绘制出来,然而c#GDI+中绘图的坐标与我们常用数学中笛卡尔坐标系是不一样的,所以就要转换GDI+中 ...
- c语言确定原点建立坐标系,在GDI+中如何实现以左下角为原点的笛卡尔坐标系
今天写了一个求点集合的凸包的一个算法,虽然结果求解出来了,但是想将过程用GDI+绘制出来,就需要将点绘制出来,然而c#GDI+中绘图的坐标与我们常用数学中笛卡尔坐标系是不一样的,所以就要转换GDI+中 ...
- 《3D数学基础》提炼总结(一)3D数学和笛卡尔坐标系
写在前面,想学好图形学,数学是必不可少的,市面上想找一本书既包括数学知识又与图形学和编程连续紧密的,这本书算是名气较大的,再加上很多语言比较通俗幽默,读起来不那么想睡觉,所以就是它啦(#^.^#).当 ...
- 大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ)
大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ) 以Unity为例 float[] get_coordinate( float lat, float lon,float H1) {//H ...
- (学习用1)调用用RRT算法进行笛卡尔空间轨迹规划和关节空间轨迹规划
在MoveIt中,可以通过调用computeCartesianPath()函数来使用RRT算法进行笛卡尔空间轨迹规划,可以通过调用computeJointSpacePath()函数来使用RRT算法进行 ...
- 3D游戏开发所需的数学基础——笛卡尔坐标系
很多人会觉得图形学中的数学复杂难懂.的确,一些数学模型在初学者看来晦涩难懂.但很多情况下,我们需要打交道的只是一些基础的数学运算. 笛卡尔坐标系 在游戏制作中,我们使用数学绝大多数是用于计算位置,距离 ...
- wgc84 笛卡尔_大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ)
大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ) 以Unity为例 float[] get_coordinate( float lat, float lon,float H1) { // ...
- 商品sku算法php,笛卡尔乘积-电商网站商品sku组合算法应用
笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员. 利用笛卡尔乘积 ...
- android投影坐标转换,关于android相机:透视投影中的笛卡尔坐标系
我仍在为增强现实应用程序实施透视投影.我已经问过一些有关视口计算和其他摄影机问题的问题,Aldream在此主题中对此进行了解释 但是,我目前没有任何有用的值,我认为这取决于我对笛卡尔坐标空间的计算. ...
最新文章
- 如何使用LocalDateTime解析/格式化日期? (Java 8)
- 通信 / HTTP / 什么是 REST 接口
- 设置Qt应用程序图标
- 拥抱开源,好莱坞有了自己的开源基金会:学院软件基金会
- iOS定时器-- NSTimer 和CADisplaylink
- 关于An association from the tablea refers to an unmapped classB
- vue-cli(vue脚手架)搭建
- 【转】Apache配置正向代理与反向代理
- Spring+IOC(DI)+AOP概念及优缺点
- 计算机在工程制图上的应用,浅析计算机软件在工程制图中的应用
- 微信小程序原生自定义组件布局问题
- arctanx麦克劳林公式推导过程_【数学】「专题」初识泰勒级数(Taylor Series)与泰勒公式(Taylor#x27;s Formula)...
- matlab ill,Matlab跑GMM聚类时出现Ill-conditioned covariance created at iteration xx错误提示
- 独立t检验和配对t检验_配对学生的t检验是什么?
- 加油站-问题详解(暴力-整体-贪心)
- 【ASP.NET Core】处理异常--转
- ArcGIS教程:ArcGIS中的图表是什么
- 试输出斐波那契数列的前10项
- Powerdesigner16撰画ER图
- 【tomcat 端口占用启动失败】The Tomcat connector configured to listen on port xx failed to start
热门文章
- 解决卡巴和金山词霸冲突后的卡巴问题(部分保护组件启动失败)
- 修改mysql结束符号
- 计算机桌面图标有背影,电脑界面快捷方式后面的蓝背影怎么去掉
- IDEA如何正常打开并运行别人的Web项目
- qpython kivy_kivy学习资料
- Error mounting /dev/sda2 at /media/mk90/F: Command-line `mount -t ntfs -o
- JAVA计算机毕业设计紫陶文化传播与学习交流网站Mybatis+源码+数据库+lw文档+系统+调试部署
- FinTech创新系列博客
- Secure CRT串口工具log打印时间点
- C++学生考勤管理系统报告