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

标签 javascript math coordinates point

我正在创建一个塔防游戏,并希望阻止用户在路径上放置塔。该路径存储为具有属性 xy 的对象数组。我将做一个简单的例子来解释。许多“级别”(也称为路径)存储在数组内。该数组(例如 Array[0])内有多个对象,每个对象详细说明了 map 上的一个点,然后将这些点连接起来创建一条路径:

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 值变化的路径上的数学原理相对简单,因此我有一个工作版本 ( which you can find here )。

使用上面的路径示例,您可以测试我的 fiddle 以确保您遵循。尝试坐标 0,35 (应该)返回 true。这是因为 x 不会改变,所以我们只需检查 y 是否在第一个和第二个点的 y 值范围内(事实确实如此)。按预期工作:)

但是,我的问题是试图找出塔是否位于对 Angular 线上。这两个值都会改变,所以我需要计算出数学来解释某种“对 Angular 线”。使用第二个和第三个路径点,从 x:0y:50x:50y:100 的对 Angular 线 形成后,我们可以想象围绕这条对 Angular 线有一个正方形。我的(不正确的)函数目前阻止该正方形中的任何点成为塔,而它应该只是不能使用的对 Angular 线。

本质上,我当前的错误函数执行此操作,a 是对 Angular 线的起点,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

该点在线上,但在两点的边界之外。所以你必须为此添加检查。

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

关于javascript - 检查点是否位于两组坐标之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20736483/

相关文章:

javascript - 正则表达式:在起始定界符和可选的结束定界符之间捕获

python - 如何求解 numpy 数组上的符号方程?

algorithm - 关于循环排列

PHP floatval、intval、substr 没有正确返回值

Javascript - 需要仅从 SVG 路径的笔画获取 x 和 y 坐标?

javascript - 如何返回选定的文本父元素html

javascript - 拖放到 div 的特定区域

javascript - 将变量值传递给脚本函数中的变量 (Javascript)

java - 国王的迷宫

python - 将 3 维坐标映射到 1 维索引