- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题有点牵强。我写了一个算法来分解 simple polygon到凸子多边形中,但现在我无法证明它不是最佳的(即使用斯坦纳点(添加的顶点)的凸多边形数量最少)。我的教授坚持认为不能用像这个这样的贪婪算法来完成,但我想不出反例。
所以,如果有人能证明我的算法是次优的(或最优的),我将不胜感激。
用图片解释我的算法的最简单方法(这些来自较旧的次优版本)
我的算法所做的是围绕点 i 延伸线段,直到它碰到对边上的一个点。
如果这个范围内没有顶点,它会创建一个新的(红点)并连接到它:
如果范围内有一个或多个顶点,它会连接到最近的顶点。这通常会产生具有最少凸多边形数量的分解:
然而,在某些情况下它可能会失败——在下图中,如果它碰巧先连接中间的绿线,这将创建一个额外的不需要的多边形。为此,我建议仔细检查我们添加的所有边(对角线),并检查它们是否仍然是必要的。如果没有,请将其删除:
然而,在某些情况下,这还不够。看这个图:
用 a-c 替换 a-b 和 c-d 会产生更好的解决方案。但是,在这种情况下,没有要移除的边缘,因此这会带来问题。在这种情况下,我建议优先顺序:在决定将反射顶点连接到哪个顶点时,它应该选择具有最高优先级的顶点:
最低)最近的顶点
med) 最近的反射顶点
最高)在向后工作时也在范围内的最近反射(难以解释)-
在 this figure ,我们可以看到反射顶点 9 选择连接到 12(因为它最接近),当连接到 5 时会更好。顶点 5 和 12 都在由延长线段 10- 定义的范围内9 和 8-9,但应优先考虑顶点 5,因为 9 在 4-5 和 6-5 给出的范围内,但不在 13-12 和 11-12 给出的范围内。即边 9-12 消除了 9 处的反射顶点,但不会消除 12 处的反射顶点,但它可以消除 5 处的反射顶点,因此应优先考虑 5。
使用此修改版本时,边缘 5-12 可能仍然存在,但可以在后处理过程中将其删除。
有没有我错过的案例?
伪代码(由 John Feminella 请求)——这缺少图 3 和图 5 下的位
assume vertices in `poly` are given in CCW order
let 'good reflex' (better term??) mean that if poly[i] is being compared with poly[j], then poly[i] is in the range given by the rays poly[j-1], poly[j] and poly[j+1], poly[j]
for each vertex poly[i]
if poly[i] is reflex
find the closest point of intersection given by the ray starting at poly[i-1] and extending in the direction of poly[i] (call this lower bound)
repeat for the ray given by poly[i+1], poly[i] (call this upper bound)
if there are no vertices along boundary of the polygon in the range given by the upper and lower bounds
create a new vertex exactly half way between the lower and upper bound points (lower and upper will lie on the same edge)
connect poly[i] to this new point
else
iterate along the vertices in the range given by the lower and upper bounds, for each vertex poly[j]
if poly[j] is a 'good reflex'
if no other good reflexes have been found
save it (overwrite any other vertex found)
else
if it is closer then the other good reflexes vertices, save it
else
if no good reflexes have been found and it is closer than the other vertices found, save it
connect poly[i] to the best candidate
repeat entire algorithm for both halves of the polygon that was just split
// no reflex vertices found, then `poly` is convex
save poly
最佳答案
我相信常规的五角星(例如具有共线段的交替点)是您寻求的反例。
回复评论编辑
根据我修改后的理解,修改后的答案:尝试锐角五角星(例如, ARM 足够窄,只有与您正在处理的反射点相对的 ARM 的三个点在被认为是“良好的反射点”的范围内)。至少在纸上完成它似乎提供了比最佳效果更多的东西。然而,最后阅读你的代码让我想知道:“最接近”(即最接近什么)是什么意思?
备注
尽管我的回答被接受了,但这并不是我们最初认为的反例。正如@Mark 在评论中指出的那样,它在与最佳状态完全相同的时间从 4 变为 5。
人字拖、人字拖
进一步反射(reflection),我认为我毕竟是对的。通过简单地确保一对臂具有共线边缘,可以在锐角星中保留四个的最佳界限。但是算法找到了五个,即使打了补丁。
我明白了:
删除无效的 ImageShack 链接
当最佳是这样的:
删除无效的 ImageShack 链接
关于geometry - 分解为凸多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694108/
我正在尝试在 R 中计算任意 N x J 矩阵 S 的投影矩阵 P: P = S (S'S) ^ -1 S' 我一直在尝试使用以下函数来执行此操作: P 概述 solve 基于一般方阵的 LU 分解
所以我有一个包含数千行的非常旧的文件(我猜是手工生成的),我正试图将它们移动到一个 rdb 中,但是这些行没有转换为列的格式/模式。例如,文件中的行如下所示: blah blahsdfas
这实际上只是一个“最佳实践”问题...... 我发现在开发应用程序时,我经常会得到很多 View 。 将这些 View 分解为几个 View 文件是常见的做法吗?换句话说......而不只是有view
使用以下函数foo()作为简单示例,如果可能的话,我想将...中给出的值分配给两个不同的函数。 foo args(mapply) function (FUN, ..., MoreArgs = NUL
正面案例:可以进入列表 groovy> println GroovySystem.version groovy> final data1 = [[99,2] , [100,4]] groovy> d
省略素数计算方法和因式分解方法的详细信息。 为什么要进行因式分解? 它的应用是什么? 最佳答案 哇,这个线程里有这么多争斗。 具有讽刺意味的是,这个问题有一个主要的有效答案。 因式分解实际上在加密/解
术语“分解不良”和“重构”程序是什么意思?你能举一个简单的例子来理解基本的区别吗? 最佳答案 重构是一种通用技术,可以指代许多任务。它通常意味着清理代码、去除冗余、提高代码质量和可读性。 分解不良代码
我以前有,here ,表明 C++ 函数不容易在汇编中表示。现在我有兴趣以一种或另一种方式阅读它们,因为 Callgrind 是 Valgrind 的一部分,在组装时显示它们已损坏。 所以我想要么破坏
最初,我一直在打开并同时阅读两个文件,内容如下: with open(file1, 'r') as R1: with open(file2, 'r') as R2: ### m
我正在尝试摆脱 标签和标签内的内容使用 beatifulsoup。我去看了文档,似乎是一个非常简单的调用函数。有关该功能的更多信息是 here .这是我到目前为止解析的 html 页面的内容...
给定一个 float ,我想将它分成几个部分的总和,每个部分都有给定的位数。例如,给定 3.1415926535 并要求将其分成以 10 为基数的部分,每部分 4 位数字,它将返回 3.141 + 5
我的 JSF 项目被部署为一个 EAR 文件。它还包括一些 war 文件。我需要 EAR 的分解版本(包括分解的内部 WAR)。 有什么工具可以做到吗? 最佳答案 以编程方式还是手动? EAR 和 W
以下函数不使用行透视进行 LU 分解。 R 中是否有一个现有的函数可以使用行数据进行 LU 分解? > require(Matrix) > expand(lu(matrix(rnorm(16),4,4
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 7年前关闭。 Improve this
我正在使用登记数据进行病假研究。从登记册上,我只得到了每个人的病假开始日期和结束日期。但日期并没有逐年分割。例如,对于人 A,只有开始日期 (1-may-2016) 和结束日期 (14-feb-201
我发现以下 R 代码使用 qr 因式分解无法恢复原始矩阵。我不明白为什么。 a <- matrix(runif(180),ncol=6) a[,c(2,4)] <- 0 b <- qr(a) d <-
我正在尝试检测气候数据时间序列中的异常值,其中一些缺失的观测值。在网上搜索我发现了许多可用的方法。其中,STL 分解似乎很有吸引力,因为它去除了趋势和季节性成分并研究了其余部分。阅读 STL: A S
我想使用 javascript 分解数组中的 VIN,可能使用正则表达式,然后使用某种循环... 以下是读取 VIN 的方法: http://forum.cardekho.com/topic/600-
我正在研究 Databricks 示例。数据框的架构如下所示: > parquetDF.printSchema root |-- department: struct (nullable = true
我正在尝试简化我的代码并将其分解为多个文件。例如,我设法做到了: socket.once("disconnect", disconnectSocket); 然后有一个名为 disconnectSock
我是一名优秀的程序员,十分优秀!