计算精灵之间的面积

时间:2010-07-13 02:54:03

标签: algorithm

我正在制作一个简单的2D足球比赛,同时在我的球员之间传球,我想检查是否有任何敌方球员可以拦截球,我想做的是计算我之间的坐标列表玩家可以说是走廊,然后检查是否有敌方玩家在这个地区,

--------------------------
S                        S
--------------------------

当它们像这样躺着时,很容易计算Ss之间的区域,但是如何在它们未对齐时计算区域,

       /S /
      /  /
     /  /
    /  /
   /  /
  /  /
 / S/

编辑:当我指的是区域时,我想要该区域中的坐标列表,以便我可以根据玩家坐标检查这些坐标,而不是区域的大小。

3 个答案:

答案 0 :(得分:1)

为什么不旋转坐标系,这样两个玩家都会对齐? 假设您有固定数量的玩家(例如22个),则将旋转+平移矩阵中的每个(x,y)坐标相乘,这使S1(或S2,并不重要)与其伴侣对齐。

你可以用这个简单的公式计算旋转矩阵: http://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_given_an_axis_and_an_angle 进一步解释和一个很好的例子: http://www.quantunet.com/flash8/knowledgebase/actionscript/advanced/matrix/matrix_rotation.html

答案 1 :(得分:1)

(image) http://img441.imageshack.us/img441/9051/soccer.png

显示敌人在敌人的红线Calculate the distance之间,由两名玩家(虚线)组成的线。如果是<= w/2 w是“区域”的宽度),那么敌人都在该区域内,或者在其中一个玩家后面。

显示敌人在橙色线之间:要检查他是否在其中一个玩家后面,只需检查他是between the two lines通过其中一个玩家并且是{{} 3}}(normal)到第一行(通过两个玩家的虚线)。

这将告诉你敌人是否在黄色区域内:

答案 2 :(得分:0)

如果它只需要近似,你需要快速计算,然后估计你的物体的“直径”(即使它是正方形),然后乘以它们的中心之间的距离(每端减1个半径)总共1个直径)。这将是非常快速和非常接近。

更新:误读了这个问题,我认为你真的想要“这个区域”。

您仍然可以如上所述逼近它,但将侧点确定为假想圆上的点,与连接两者的线相差90度。同样,它是近似的,但它使您不必计算“对象的最近侧”和“最接近线的点”。

更新2:

实际上,甚至更好:按照它们距离S2中心的距离对S1的点进行排序。选择第二和第三最近。按照它们离S1的中心有多远的顺序对S2的点进行排序。选择第二和第三最近。那些是4个顶点。 “1st”最接近的是直接指向另一个物体的那个,所以第二个和第三个是“侧面”,就面对另一个物体而言。