比较两个x和y是否在有效范围内

今天,我的思想有点模糊,前些日子我做对了,但我不会,今天我会继续。 XD我需要一些帮助来思考和find一种没有错误的方法。

我想要做的就是比较两个vector2,这是我在javascript / nodejs中的实现, 不是两个浮点数组。

我想能够比较oldVector2的浮点x或y值与newVector2的浮点x和y值有多大差别。

例:

// When newVector2 is in a valid range less than 10 oldVector [0] = 1.55; // This is x oldVector [1] = 0.22; // This is y newVector2 [0] = 2.55; // This is x newVector2 [1] = 1.55; // This is y // When newVector2 is not in a valid range less than 10 oldVector [0] = 1.55; // This is x oldVector [1] = 0.22; // This is y newVector2 [0] = 21.55; // This is x newVector2 [1] = 1.55; // This is y if (the x and y of newVector2 is in a valid range less than 10 compared to the x and y of the oldVector?) { // You are in a valid range } else { // Not in a valid range } 

我的问题是:什么时候有迹象? 负数和正数,这个比较怎么比较?

我在这里要做的是我已经使用了abs() ,之前我已经做过了,但是我做了不同的事情,因为在unity3D中我做了一次,就是这样:

 var distance = (ab).magnitude; 

其中a和b是两个2Dvector,这里是https://docs.unity3d.com/ScriptReference/Vector2-magnitude.html的大小。

然后他比较

 if(distance> 10)... 

我很困惑,为什么我这样做。

Vector2是一个实体的位置,我想validation它不会比允许的更快。

你需要“绝对”的方法: abs() 。 这将返回一个总是大于或等于零的值。 这样,您只需要为每个轴检查一次:

 var range = 10; if ( abs(oldVector[0] - newVector2[0]) < range && abs(oldVector[1] - newVector2[1]) < range ) { // valid } else { // not valid } 

这将允许您检查newVector2是否在正方形模式的oldVector范围内。

要检查newVector2是否位于oldVector范围内的圆形图案中(这通常是您希望限制实体移动时所需的范围),则必须检查距离,我们通过使用毕达哥拉斯定理来做到这一点,而且我们需要平方根方法( sqrt() )。

 var range = 10; var diffVector = [newVector2[0] - oldVector[0], newVector2[1] - oldVector[1]]; var distance = sqrt(diffVector[0]*diffVector[0] + diffVector[1]*diffVector[1]); if (distance < range) { // valid } else { // not valid } 

现在,如果你需要经常这样做,平方根操作在计算机上的成本通常很高,所以你可以采取一个快捷方式,比较平方距离:

 var range = 10; var diffVector = [newVector2[0] - oldVector[0], newVector2[1] - oldVector[1]]; var squaredDistance = diffVector[0]*diffVector[0] + diffVector[1]*diffVector[1]; if (squaredDistance < (range * range)) { // valid } else { // not valid } 

第一种方法会给你在下面的图像中的浅蓝色方块覆盖的范围,而第二种方法会给你紫红色的圆圈:

在这里输入图像说明