问题的评论
-
9日评论
感谢Cris指出我原始测试套件中的一个漏洞。我添加了一个测试用例,其中有一个可移动的顶点作为P的第一行,并重新记录了所有条目。
我认为测试用例7是错误的-起始顶点[12]可以被删除,不是吗?
谢谢你,理查德。我已经更新了测试用例7,并且正在恢复解决方案。万博 尤文图斯
现在我认为测试用例7的顶点以错误的顺序出现(循环移位)]:-)
我同意理查德的观点。我相信我的解决方案现在是正确的,但是测试用例7失败了。
这是我第二次在半夜起来试图解决这个问题。;-)在我之前修复测试用例7的尝试中,我被我画的图愚弄了。
我再次修改了测试用例7。当我运行你最新的解决方案时,克丽丝,它通过了。我们会看到当所有的解重新被重划时会发生什么。万博 尤文图斯
对不起,史蒂夫!希望你最后能睡上一觉。
这个问题的最终讨论现在在MATLAB博客上:
http://blogs.mathworks.com/steve/2012/08/28/wrapping-up-the-analysis-of-cody-万博 尤文图斯solutions/
混合顶点、直线和多边形是不公平的,因为顶点和直线不是多边形,它们的简化算法也不相同(例如,多个顶点可以通过使用函数unique来简化)。作者至少应该将问题描述改为“消除任何形状或形式的不必要顶点”。不管怎样,这是一个好问题(拥有非流形多边形即使没有非多边形也很难)。
解决方案的评论
-
6个评论
啊呀……对不起,使用了神经网络工具箱中的一个函数而没有意识到它。不知道它的存在(正常)
如果有任何方式可以删除这一个,我希望它被删除,因为我认为这是作弊(我和Sven有一个很好的竞争!)
没事的,理查德……当我回家时,我只需要在我的脚本顶部添加normr=@(x)normaliseVector3d(x),我们就可以继续工作了……我们可能接近一个优化的业务,但业务仍然存在。只要我们不通过一些巨大的regexp字符串来入侵测试套件,那么我仍然在游戏中。
不,游戏测试套件已经过时了!尽管Steve使用带有浮点顶点的多边形可能会把这一切搞得一团糟……
呵呵……是的,我相信这会让我们匆忙地对当前最好的解决方案增加一个容忍度。但如果这是用于bwboundaries(BW,'noholes','minimal')类型选项的bwboundaries,那么所有坐标都可以假设为整数,甚至规范化也将是不必要的步骤,因为bwboundaries从未跳过一个像素。
嘿,伙计们……不要担心,我不会通过添加带有浮点舍入错误的新测试用例来干扰您。当我在我的博客上发表后续文章时,这将是一个有趣的话题。
-
7评论
很好地完成了!你觉得我们已经找到最佳方案了吗?
干杯,显然我无耻地采用了你最喜欢的功能。
老实说,我认为我们已经收敛到最佳(尽管这个词的使用有点扭曲),回到64岁左右,然后55岁,然后48岁……所以我只是暂时认为我们已经走到了尽头。如果平局,我肯定会松一口气:)
我想也许我们可以通过转换为行矩阵来摆脱sum(,2)和any(,2)的额外参数,但这样做会添加参数circshift(),所以这种方式可能没有任何改进。
我知道我们的函数的*每一行*都会生成一个M-Lint警告:)哦,除了函数名。
是啊,我也试过各种方法!我在想一个更好的方法来规范化矩阵。我发现了normr,发布了我的解决方案,然后意识到它实际上是一个工具箱函数。我很乐意删除这个条目:|如果你用normr(diff(P))替换正常化行,你可以得到36
哈,“未定义的函数或变量‘normmr’。”前段时间我有一个normalizeVector3d()的版本,这是我一直使用的geom3d()包的一部分…
我很想看看诺曼先生的…我希望它通过bsxfun()向量化
不,它没有!它是这样做的:
N =√(sum(x.^2,2));
X = X ./ n(:, ones(1, size(X,2)));
好吧,那么,我打赌下面的代码会运行得更快,并且适用于任何维度的数据(例如一个[10,2,50]大小的矩阵,表示50组10个XY向量):
Normr = @(v)bsxfun(@rdivide, v, sqrt(sum(v;^ 2, 2)));
-
2的评论
-
1评论
永不放弃,永不投降!
-
2的评论
有什么提示可以减小这个东西的尺寸吗?
嗨,安东,这里有一个提示:你正在砍下P,然后取它自身和它的circshift之间的差。这非常接近于一个简单的diff()命令。Circshift是一个有用的函数,但不完全是你得到它;)
你可以这样想:
diff()将获取从一个点到下一个点的向量。如果任何相邻的向量指向完全相同的方向,它们就可以被移除。更具体地说,当直线方向发生变化时,你就找到了想要保留的顶点。你怎么发现它呢?
-
1评论
理查德,这是团队合作的成果!
-
1评论
我不知道你还能这么做!
-
1评论
哈哈——说到可怕的科迪调整——我找到了另一个!
-
4评论
哈,理查德,这只是对我所能看到的仅剩的一点进行了巧妙的调整……我认为你应该得到更好的分数,因为你做了一些我没有想到的改进(使用circshift而不是索引是一个很好的尝试)。我认为我们已经在74/75左右留下了“优秀的健壮解决方案”的领域,现在我们已经进入了“由代码驱动的调整”的阴暗世界,我希望没有人在制作真正的产品时冒险进入这个领域。s manbetx 845
啊呀!你这次又做了什么!
好吧,算出来了(除了我用了长度!)肯定还有别的原因:)
哦,谢谢!但多亏了你的调整我的分数才会下降。我认为在这一点上,这是一个团队的努力。
-
1评论
有点作弊-假设完全抵消。所以这个方法只适用于整数坐标,我甚至不相信它总是有效!