2011-10-28 19 views
3

这是问题的图形表示: http://i.imgur.com/aBG3p.jpg请帮我一个三角算法

给出的起始点开始(X1,Y1)和目标点(x2,y2),我必须确定路径在两点之间是开放的,或者如果它不是开放的,则发生碰撞的坐标。

这将是除涉及特殊规则一个很重要的问题:

  1. 线可以拦截点,而不会造成碰撞它(I,J)调用一个小而不同程度。如果(i,j)与(x1,y1)直接相邻,我们可以安全地在其角上切割大约0.4,而不会触发碰撞。然而,如果直接通过它,我们不能减少0.4,只能在角落。随着我们距离(x,y)越来越远,这个数字逐渐减少到大约0.2。不幸的是,我只是想重建一次我看到的东西,所以我不知道确切的值,我只是近似他们。

  2. 需要注意的是:如果直接在(i,j)旁边的空间在我们相交的平面上,在我们相交的一侧也被占用,则无论如何都会发生碰撞。如果我们拦截它太多,碰撞就会发生(i,j),否则会发生在相关的相邻区块中。

我做了几次尝试来解决这个问题,总是以错误的底片和/或在错误的贴片上产生的碰撞结束。我试图在不考虑角度的情况下做这件事,只要看着x和y的小数点就行了。我不确定是否可以做到这一点,或者我必须以某种方式使用角度,或者以某种方式使用角度可以让我的生活更轻松。

如果可以的话请帮忙!

+0

矩形是1x1,并且全部在网格上对齐。 – user1012037

+0

你的意思是什么“减少0.4”?是0.4分数?如果是这样,一小部分是什么?你能否解释1有点不同? – vlsd

+0

矩形是1x1,但我需要能够安全地切割角落而不会触发碰撞。我不确定该怎么称呼它。可能三角形的切割面积和其两边的长度对于防止误报/消极是非常重要的。 – user1012037

回答

2

看起来好像你可以得到类似于你所描述的结果,将占用的网格视为包含单位圆。这会让你通过角落,但会阻止任何2个相邻的角色,因为他们接触。

所以我试着用当前的碰撞方法来快速检查矩形,然后在发现碰撞时通过测试进入框中的线对着以它为中心的圆来改进它。

+0

非常有趣的想法。试图计算现在相交的区域面积,这很难。我已经可以很容易地检查相邻的坐标,所以我甚至不需要使用单位圆(我认为它们会太严格)。 – user1012037