检查点是否位于两组坐标之间

安迪

我正在创建一个塔防游戏,并希望防止用户在路径上放置塔。路径存储为具有属性x的对象数组y我将做一个简单的例子来说明。许多“级别”(又称路径)存储在数组中。在此数组内(Array[0]例如),有多个对象,每个对象都详细说明了地图上的一个点,然后将它们结合起来以创建路径:

levels = [
          [{x: 0, y: 0},         // When plotted:
           {x: 0, y: 50}],       // 0,0 to 0,50 creates a vertical line
           {x: 50, y: 100}],     // 0,50 to 50,100 creates a diagonal
          [{}] // more levels                                  
         ];

由于算出点是否只有一个x / y值变化的路径上的数学背后的相对简单性,我有一个有效的版本(您可以在此处找到)。

使用上面的路径示例,您可以测试我的小提琴,以确保您正在关注。尝试0,35(应)返回true的坐标这是因为x不变,因此我们仅检查y是否在第一点和第二点的y值之内。按预期工作:)

但是,我的问题是试图找出塔是否在对角线上。这两个值都改变,因此我需要弄清楚数学来解释“对角线”排序。使用第二和第三个路径点,从对角线x:0y:50x:50y:100形成,我们可以想象解决此对角线的正方形。我的(不正确的)函数当前阻止该正方形中的任何点成为塔,而它只能是不能使用的对角线。

本质上,我当前不正确的函数a是通过对角线的起点和b终点来实现此目的的:

if(x is between a.x and b.x AND y is between a.y and b.y){
   build the tower
}

抱歉,所有的单词和代码都不多,但是jsFiddle是一个真正精简的版本,应该有助于理解。我主要是在寻找实现该功能的数学方法,如果您可以使用伪代码,可以自己编写代码。

埃扎丁

您是否考虑过直线方程:y = a * x + b

您可以找到带有两个点的a和b。

使用第一点:(0,50)

50 = 0 + b

所以:

b = 50

使用第二点:(50,100)

100 = 50 * a + 50

所以:

a = 1;

因此,确定点是否在该线上的方程式为:

y = 1 * x + 50

例子:

点1:(10,60)

y = 1 * 10 + 50 = 60

这一点就行了。

点2:(60、110)

y = 1 * 60 + 50 = 110

该点在直线上,但在两个点的边界之外。因此,您必须为此添加检查。

我可以继续检查更多点。但我希望以上内容能帮助您前进。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章