2009-09-06 53 views
0

我知道这是更多的高中数学(WOW了,因为我是有很长一段时间),但我想以编程方式解决这个问题,所以我伸手计算器矢量数学和矩形

的集体知识鉴于此布局:

alt text

中点是我的参考点与阵列中的我的所有其他点的矢量点(P)

我可以得到这种状态下与具有浅蓝色的代码区域通过将其分成四个象限,并进行不良气泡排序以在每个象限中查找最大(y)或最小(x)值。

我需要找到只象限是外边框完全打红没有空格。例如,左下角和右上角没有任何空白点击浅蓝色矩形。

我相信我的术语是所有在这里下车和IM不找任何特定的代码,但如果有人能指出我的这个问题,还是什么我已经有下一步更优化的解决方案。

谢谢

+0

我不确定我完全理解你的问题......如果你总是有相同的布局,似乎你可以说,“好吧,右上角和左下角总是相邻的红色,而不是白色空间“,并称之为一天。然而,这似乎太简单了,所以除此之外肯定还有更多。你能否详细说明你有哪些信息? – 2009-09-06 19:22:16

+0

红色矩形可以是任何大小和任何地方。填满整个象限/进入它们之间。基于给定的参考点,在这个例子中,我需要建立内部矩形(在本例中由轴分割),并找出这些矩形中的哪一个在所有的sies上对红色或蓝色完全碰撞。任何只触摸蓝色或红色(触摸空白区域)的东西都需要掉落,剩下的蓝色区域会变成红色。我知道每个红色矩形的4个矢量点。 – Armychimp 2009-09-06 19:56:22

+0

我的妻子给出的很好的比喻是蓝色是4个泳池,我需要找到泄漏(左上角和右下角)轴不能泄漏的泳池,所以我只需要检查两侧。 – Armychimp 2009-09-06 19:56:56

回答

0

我可能先做一些BFI解决方案,那么也许看看概括它,或至少将其降低到一台驱动器环路。

所以,如果它也正是这些形状,而不是一个通用的解决方案,我想你应该进行排序是这样的:

  1. 推导蓝色矩形的坐标。我怀疑有一件事让你感到困惑,那就是你有蓝色矩形的每个单独的x和y,但是你不能轻易地循环它们。

  2. 导出每个矩形边缘中点的坐标。你将需要这个,因为你关心象限。一旦完成1,这将是微不足道的。

  3. 为每个1/2矩形边缘写入不同的代码。毫无疑问,更聪明的方式,但这将得到有效的代码。

  4. 现在,如果你在意它更优雅。我敢打赌,你可以将规则减少到8行 表,其中包含像1,-1或类似的东西。

0

首先,由于不相交,因此无法用单个矢量定义红色区域。您需要与远处红色区域的数量相同的矢量数。

其次,我们认为不同的红色数字既不相交也不共享边界​​?在接下来的条款中我会。

第三,下点2假设,象限将所有红色外侧当且仅当存在一个连续的红色数字都相交其轴线(即射线)。为了确定所有象限,你只应该按照给定的顺序遍历所有(P)点。这需要线性时间并解决问题。