首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >橡皮筋钉游戏

橡皮筋钉游戏
EN

Stack Overflow用户
提问于 2010-11-06 22:11:49
回答 1查看 1K关注 0票数 3

我必须做一个这样的闪光灯游戏:有一个板上有洞(超过1000)。最初,有三个钉在板上和橡皮筋围绕在他们周围。我们有三种可能的操作: 1.加钉-在板上加一根钉,2.拆下钉-移除一根钉(如果有超过3根钉)-橡皮筋必须采用其余钉的形状。3.活动钉-橡皮筋必须根据固定杆的当前位置进行更新。

如何最优地找到橡皮筋的形状?

我有两个音符,但我得做一点。主要的是,我们只有在“移动”操作时才能改变橡皮筋的形状,而且我们使用相同数量的固定杆,只有一个在改变位置:

  1. 由凸包算法推导而来。我们得知道橡皮筋里面有什么钉,外面有什么。它可能得到一个小的complicated.
  2. We工作,只有3个锚:两个锚和一个中间。这两个锚为1中桩相互作用形成了一条分界线。在活动侧,橡皮筋作为两个节段之间的两个锚钉和中间钉。在不活动的一面,1中钉是自由移动的,而橡皮筋作为一条直线之间的2个锚钉。以上所述的警告是,在某些情况下,1中桩在边界线活动侧的移动可导致2段中的一节接触到第4根桩。程序必须检测到这种情况,并相应地更新新的锚钉。这些只是对这一概念的一些有限经验的建议。开发人员应该根据自己的经验和判断来确定最佳方法。

你还有什么其他的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-06 22:49:59

“开发人员应该根据他的经验和判断来确定最好的方法。”--您是否从给出的规范中复制和粘贴了这个方法?

你要求一个“最优”的解决方案,但如果我是你,我的目标是一个“正确的,足够快”的解决方案。你有一个合同要履行,你可以把无症状留给学者。

无论如何,你的计划,更新乐队时,只有当球员移动一个钉子看上去不错。我们需要记住所有接触橡皮筋的钉,对于每一根钉,我们必须记住它在橡皮筋的哪一边(为了正确地画出带子)。

现在,假设玩家将peg A从a移动到a‘。

作为一个普遍的原则,值得记住的是,即使你的时间段很短,从a到a的距离很小,但是可能会发生多种事情。因此,您必须考虑在该时间段中可能发生的所有事件,选择最早的这样的事件,相应地更新您的数据结构,然后继续剩余的时间段。

那么有什么样的事件呢?

  • Peg A“拿起”乐队。(如果佩格·A还没有出现在乐队上,而a-a‘线跨越了乐队上的一条钢丝绳,那么它就会这么做。)
  • peg“放下”乐队。(如果
  • peg与相邻的B和C相邻,而a-a‘跨越B-C线,则是这样做的。)
  • Peg在乐队中获得了一个邻居。(当
  • peg A在乐队上,B是A的邻接,a‘-B包含另一个peg C时发生这种情况)。(这种情况发生在

A在带上,带上的相邻钉在A-B-C上,而peg B在a-a‘-C三角形中时发生),

因此,您应该确定所有这样的事件;计算每个事件发生的时间;按时间对事件进行排序;处理最早的事件(仅);对剩余的时间段重复。

(如果两个事件同时发生,怎么办?这要看你的经验和判断了。)

编辑补充:一个复杂的是,一个钉住可能出现在一个以上的部分橡皮筋(例如,带可能是add appear )。但我认为上面的算法草图仍然有效。

一个进一步的皱纹是,即使有少量的钉,你可以作出任意扭曲的配置带。例如,假设带在B和C之间拉长,现在取钉住A,并将其移动到-8的图形中,围绕标杆B和C (顺时针方向围绕B,逆时针方向在C附近)。每次绕圈时,佩格A都会拿起另外几个乐队的碎片。您不能让配置的复杂性在不受约束的情况下增长,因此需要一些方法来阻止事情失控。我建议对乐队的长度施加一个最大限度的限制,这样任何试图把它拉得太远都会导致它折断(当然,在这之前你会有警告信号,例如,带子变薄,颜色变化,发出不吉利的吱吱声)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4115427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档