- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在实现 Fortune 的扫掠线算法来计算 Voronoi 图。我的主要引用资料是 de Berg 等人的“计算几何:算法和应用”,虽然他们对该主题的介绍非常清楚,但他们忽略了一些我自己一直难以解决的小而重要的细节。我在网上搜索了帮助,但其他网站要么提供了比教科书更高的概述,要么提供了与本书提供的完全相同的伪代码。
我需要一种方法来确定由海滩线上的三重弧确定的一对断点是收敛还是发散,以便检测即将发生的圆圈事件。似乎要做出决定,我需要了解 Voronoi 单元边缘的形状,随着 Fortune 算法的进展,断点会追踪到这些边缘。例如,如果我能找到由断点追踪的边缘的斜率,我可以计算由断点和它们各自的斜率形成的两条线相交的位置,并根据该结果决定它们是否收敛。但是,我不知道如何获取斜坡上的信息,只知道断点的当前位置。
我唯一需要处理的信息是三个站点的 x、y 位置和扫掠线的当前 y 坐标(我使用的是水平扫掠线)。
其实,我确实有一个确定收敛的想法。给定两个站点,它们定义的海滩线的两个部分之间的断点仅由扫描线的当前位置控制。想着把两个断点的位置记录下来,把扫描线暂时往前推一点,记录下它们的新位置。因为普通 Voronoi 图的边不弯曲,如果新断点对之间的距离小于旧对断点之间的距离,则断点收敛;否则,他们就会分歧。但这看起来既危险(我不知道它是否总是有效)又丑陋。肯定有更好的方法。
我们将不胜感激任何想法,尤其是伪代码(如果可能,使用类似 C# 的语法)。我还知道可以使用计算几何库来获取 Voronoi 图,但这是个人学习练习,所以我想自己实现算法的所有部分。
最佳答案
所以这很尴尬,但在沉迷于这个问题之后,答案似乎显而易见。我写这篇文章是希望能帮助将来遇到与我相同问题的学生。
两个站点之间的 Voronoi 边垂直平分连接站点的(假想)线段。您可以通过取连接线段斜率的垂线,然后在两条边上进行直线相交测试来得出边的斜率,但还有更简单的方法。
只要三个站点都是not collinear , 那么垂直平分站点之间的线段的边缘也与边缘包含所有三个站点的圆相切。因此,如果由三个 Voronoi 站点定义的圆心位于中间 站点的前面,则由三重 Voronoi 站点定义的断点会收敛,其中“前面”和“后面”取决于坐标您选择的系统和扫掠线对齐。
在我的例子中,我有一条从最小 y 移动到最大 y 的水平扫掠线,因此如果圆心的 y 坐标大于中间站点的 y 坐标,则断点会收敛,否则发散。
编辑:Kristian D'Amato 正确地指出上述算法遗漏了一些收敛情况。我最终使用的最终算法如下。当然,我不确定它是否 100% 正确,但它似乎适用于我尝试过的所有情况。
Given left, middle, right sites
if they are collinear, return false
center = ComputeCircleCenterDefinedBy3Points(left, middle, right)
return IsRightOfLine(left, middle, center) && IsRightOfLine(middle, right, center)
IsRightOfLine(start, end, point)
((end.X - start.X) * (point.Y - start.Y) - (end.Y - start.Y) * (point.X - start.X)) <= 0
关于algorithm - Fortune算法中的断点收敛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612065/
我有几个关于我的遗传算法和整体 GA 的问题。 我创建了一个 GA,当给定一条曲线时,它会尝试找出产生这条曲线的函数。 例子如下积分 {{-2, 4},{-1, 1},{0, 0},{1, 1},{2
我正在尝试编写一个 GA 来解决以下难题... 二进制编码(我认为)非常有效。每件作品可以是: 原始向上或翻转的方式 - 1 位 旋转 0(即无)、90、180 或 270 度 - 2 位 在位置 (
我正在编写一个小代码(顺序)来计算适度数据集的网页排名(尽管并非完全微不足道)。 算法是这样的: while ( not converged ) { // Do a bunch of thing
我正在尝试检测长时间序列中的微事件。为此,我将训练一个 LSTM 网络。 数据。每个时间样本的输入是 11 个不同的特征,经过一定程度的标准化以适合 0-1。输出将是两个类之一。 批处理。由于巨大类别
我试图通过使用 optim 函数在 R 中找到最佳 GARCH 模型的参数。但是,我的值(value)观会变得很高,这是没有意义的。我在 MATLAB 中使用 fminsearch 实现了类似的算法,
我运行了 20 倍 cv.glmnet 套索模型以获得 lambda 的“最佳”值。但是,当我尝试重现 glmnet() 的结果时,我收到一条错误消息: Warning messages: 1: fr
我在 dymola 中构建了一个模型。虽然在初始化过程中出现了一些错误,但最终还是计算成功了。 模型收敛成功后,我尝试使用“在模型中保存起始值”选项将正确的迭代变量 strat 值存储到模型中,以便模
我有一个分层 Logit,可以随着时间的推移进行观察。正在关注Carter 2010 ,我添加了时间、时间^2 和时间^3 术语。在添加时间变量之前,模型会使用 Metropolis 或 NUTS 进
再次感谢您花时间阅读这篇文章。 我知道这个问题已经被问了很多,而且我已经检查了很多关于这个问题的帖子:然而,我对使用反向传播的成功 XOR 学习的探索仍未完成。 我按照建议尝试调整学习率、动量、有/无
我是一名优秀的程序员,十分优秀!