如何根据 R 中的曼哈顿距离计算 Voronoi 镶嵌
How to compute Voronoi tesselation based on manhattan distance in R
我正在尝试使用 R
中的 Manhattan 距离计算 2D 的 Voronoi 镶嵌。
理想情况下 这将是一个接受一组二维点并输出分割 space 的多边形列表的函数。我不确定 Voronoi 镶嵌的哪些表示是标准的。
当然有很多方法可以用欧几里德度量来做到这一点(像 deldir
和 qhull
这样的包使这很容易),但我还没有找到一种方法来做到这一点曼哈顿距离。使用 sos
的 findFn('voronoi')
进行搜索也没有结果。
互动:Manhattan-metric Voronoi diagram(Click version)
我一直在滚动 my own in python,可以在这里总结一下基础知识:
在相邻的质心之间是一条垂直线,在曼哈顿度量中 - 如果质心是随机生成的,则最有可能是两条射线和 45 度对角线,但也可能出现直线水平、垂直或 45 度对角线。对于每个质心对,给定一组这样的线,分隔区域的边缘就在其中。收集每对线的相交点,这些线在曼哈顿度量中等距(在 epsilon 内)到它的 3 个最近的质心。还收集 45 度对角线的两个中点,它们与最近的 two 质心同样等距。外层不会关闭。如何处理它们取决于您的需要。多边形边框和边框顶点需要分类,这样您的多边形就不会一团糟。可以确定缠绕顺序是顺时针还是其他。可以做的更多,就看你需要什么了。
不幸的是,涉及的点越多,速度就越慢。每个平分线与其他每个平分线的相交是瓶颈。我一直在尝试一种插入方法,并取得了一些成功,但是 .现在我正在考虑首先尝试在质心之间创建一个最近的邻居 linkage。如果邻居已知,则相交的平分线将最小,并且可以快速计算出许多质心。
无论如何,蛮力方法确实有效:
光标附近的点实际上是一条小对角线的2个点。这是一种精确的方法,但比乍看起来要复杂。来自上面交互式 link 的 java 代码可能更快,但很难从中获得可靠且精确的几何图形。
抱歉,我不知道 R.
也许问题是关于找到在(三角形的)外接圆内匹配的正方形的最大面积。这种正方形的等式 abs(x)+abs(y)=r (www.mathematische-basteleien.de/taxicabgeometry.htm)。当你有一个三角形网格时,voronoi 图就是对偶图。
我正在尝试使用 R
中的 Manhattan 距离计算 2D 的 Voronoi 镶嵌。
理想情况下 这将是一个接受一组二维点并输出分割 space 的多边形列表的函数。我不确定 Voronoi 镶嵌的哪些表示是标准的。
当然有很多方法可以用欧几里德度量来做到这一点(像 deldir
和 qhull
这样的包使这很容易),但我还没有找到一种方法来做到这一点曼哈顿距离。使用 sos
的 findFn('voronoi')
进行搜索也没有结果。
互动:Manhattan-metric Voronoi diagram(Click version)
我一直在滚动 my own in python,可以在这里总结一下基础知识: 在相邻的质心之间是一条垂直线,在曼哈顿度量中 - 如果质心是随机生成的,则最有可能是两条射线和 45 度对角线,但也可能出现直线水平、垂直或 45 度对角线。对于每个质心对,给定一组这样的线,分隔区域的边缘就在其中。收集每对线的相交点,这些线在曼哈顿度量中等距(在 epsilon 内)到它的 3 个最近的质心。还收集 45 度对角线的两个中点,它们与最近的 two 质心同样等距。外层不会关闭。如何处理它们取决于您的需要。多边形边框和边框顶点需要分类,这样您的多边形就不会一团糟。可以确定缠绕顺序是顺时针还是其他。可以做的更多,就看你需要什么了。
不幸的是,涉及的点越多,速度就越慢。每个平分线与其他每个平分线的相交是瓶颈。我一直在尝试一种插入方法,并取得了一些成功,但是 .现在我正在考虑首先尝试在质心之间创建一个最近的邻居 linkage。如果邻居已知,则相交的平分线将最小,并且可以快速计算出许多质心。
无论如何,蛮力方法确实有效:
光标附近的点实际上是一条小对角线的2个点。这是一种精确的方法,但比乍看起来要复杂。来自上面交互式 link 的 java 代码可能更快,但很难从中获得可靠且精确的几何图形。
抱歉,我不知道 R.
也许问题是关于找到在(三角形的)外接圆内匹配的正方形的最大面积。这种正方形的等式 abs(x)+abs(y)=r (www.mathematische-basteleien.de/taxicabgeometry.htm)。当你有一个三角形网格时,voronoi 图就是对偶图。