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,yL, 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)

这就用到了, (曼哈顿边权) 与 (欧几里得边长) 的转换;

你先将每个(曼哈顿边权), 替换为: 两个 (欧几里得边长); 也就是替换为图中的(红色边)
… 然后, 将(红色边) 通过平移 到 绿色的外接矩形上,
… 你会发现, 所有红色边 的边长 等于 绿色矩形的周长

但它只适应于(凸多边形), 对于(凹多边形) 并不成立!! 你可以去证明

即, 多边形的曼哈顿周长 等于 其外接矩形的欧几里得周长

例题

`算法知识` 笛卡尔坐标系, 边长与边权, 曼哈顿距离, 欧几里得距离,外接矩形相关推荐

  1. 在GDI+中如何实现以左下角为原点的笛卡尔坐标系

    今天写了一个求点集合的凸包的一个算法,虽然结果求解出来了,但是想将过程用GDI+绘制出来,就需要将点绘制出来,然而c#GDI+中绘图的坐标与我们常用数学中笛卡尔坐标系是不一样的,所以就要转换GDI+中 ...

  2. c语言确定原点建立坐标系,在GDI+中如何实现以左下角为原点的笛卡尔坐标系

    今天写了一个求点集合的凸包的一个算法,虽然结果求解出来了,但是想将过程用GDI+绘制出来,就需要将点绘制出来,然而c#GDI+中绘图的坐标与我们常用数学中笛卡尔坐标系是不一样的,所以就要转换GDI+中 ...

  3. 《3D数学基础》提炼总结(一)3D数学和笛卡尔坐标系

    写在前面,想学好图形学,数学是必不可少的,市面上想找一本书既包括数学知识又与图形学和编程连续紧密的,这本书算是名气较大的,再加上很多语言比较通俗幽默,读起来不那么想睡觉,所以就是它啦(#^.^#).当 ...

  4. 大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ)

    大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ) 以Unity为例 float[] get_coordinate( float lat, float lon,float H1) {//H ...

  5. (学习用1)调用用RRT算法进行笛卡尔空间轨迹规划和关节空间轨迹规划

    在MoveIt中,可以通过调用computeCartesianPath()函数来使用RRT算法进行笛卡尔空间轨迹规划,可以通过调用computeJointSpacePath()函数来使用RRT算法进行 ...

  6. 3D游戏开发所需的数学基础——笛卡尔坐标系

    很多人会觉得图形学中的数学复杂难懂.的确,一些数学模型在初学者看来晦涩难懂.但很多情况下,我们需要打交道的只是一些基础的数学运算. 笛卡尔坐标系 在游戏制作中,我们使用数学绝大多数是用于计算位置,距离 ...

  7. wgc84 笛卡尔_大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ)

    大地坐标系(WGS84)转空间直角坐标系(笛卡尔坐标系XYZ) 以Unity为例 float[] get_coordinate( float lat, float lon,float H1) { // ...

  8. 商品sku算法php,笛卡尔乘积-电商网站商品sku组合算法应用

    笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员. 利用笛卡尔乘积 ...

  9. android投影坐标转换,关于android相机:透视投影中的笛卡尔坐标系

    我仍在为增强现实应用程序实施透视投影.我已经问过一些有关视口计算和其他摄影机问题的问题,Aldream在此主题中对此进行了解释 但是,我目前没有任何有用的值,我认为这取决于我对笛卡尔坐标空间的计算. ...

最新文章

  1. 如何使用LocalDateTime解析/格式化日期? (Java 8)
  2. 通信 / HTTP / 什么是 REST 接口
  3. 设置Qt应用程序图标
  4. 拥抱开源,好莱坞有了自己的开源基金会:学院软件基金会
  5. iOS定时器-- NSTimer 和CADisplaylink
  6. 关于An association from the tablea refers to an unmapped classB
  7. vue-cli(vue脚手架)搭建
  8. 【转】Apache配置正向代理与反向代理
  9. Spring+IOC(DI)+AOP概念及优缺点
  10. 计算机在工程制图上的应用,浅析计算机软件在工程制图中的应用
  11. 微信小程序原生自定义组件布局问题
  12. arctanx麦克劳林公式推导过程_【数学】「专题」初识泰勒级数(Taylor Series)与泰勒公式(Taylor#x27;s Formula)...
  13. matlab ill,Matlab跑GMM聚类时出现Ill-conditioned covariance created at iteration xx错误提示
  14. 独立t检验和配对t检验_配对学生的t检验是什么?
  15. 加油站-问题详解(暴力-整体-贪心)
  16. 【ASP.NET Core】处理异常--转
  17. ArcGIS教程:ArcGIS中的图表是什么
  18. 试输出斐波那契数列的前10项
  19. Powerdesigner16撰画ER图
  20. 【tomcat 端口占用启动失败】The Tomcat connector configured to listen on port xx failed to start

热门文章

  1. 解决卡巴和金山词霸冲突后的卡巴问题(部分保护组件启动失败)
  2. 修改mysql结束符号
  3. 计算机桌面图标有背影,电脑界面快捷方式后面的蓝背影怎么去掉
  4. IDEA如何正常打开并运行别人的Web项目
  5. qpython kivy_kivy学习资料
  6. Error mounting /dev/sda2 at /media/mk90/F: Command-line `mount -t ntfs -o
  7. JAVA计算机毕业设计紫陶文化传播与学习交流网站Mybatis+源码+数据库+lw文档+系统+调试部署
  8. FinTech创新系列博客
  9. Secure CRT串口工具log打印时间点
  10. C++学生考勤管理系统报告