Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算距离特定点最近的点 我创建了一个全景图,中间有一个罗盘,指南针指向图像的顶部中心,最初。_Javascript_Css_Math - Fatal编程技术网

Javascript 计算距离特定点最近的点 我创建了一个全景图,中间有一个罗盘,指南针指向图像的顶部中心,最初。

Javascript 计算距离特定点最近的点 我创建了一个全景图,中间有一个罗盘,指南针指向图像的顶部中心,最初。,javascript,css,math,Javascript,Css,Math,现在我想移动指南针相对于这一点,因为它是一个360度全景,它会创建一个相邻的副本。所以我想要的是,当你从左向右或从右向左移动时,把指南针指向离你更近的点 这是我到目前为止所做的事情,它的表现与我想要的不一样 下面是代码: 我所做的是我创造了两点: points.push({ x: target.offset().left + (windowWidth) / 2, y: target.offset().top }); points.push({ x: (target.offset(

现在我想移动指南针相对于这一点,因为它是一个360度全景,它会创建一个相邻的副本。所以我想要的是,当你从左向右或从右向左移动时,把指南针指向离你更近的点

这是我到目前为止所做的事情,它的表现与我想要的不一样

下面是代码:

我所做的是我创造了两点:

points.push({
  x: target.offset().left + (windowWidth) / 2,
  y: target.offset().top
});

points.push({
  x: (target.offset().left + (windowWidth) / 2) + (common.width / 2),
  y: target.offset().top
});
然后用毕达哥拉斯定理计算哪些点更接近参考点

var closestPoint = points[0];
var closestValue = Math.sqrt(Math.pow(points[0].x, 2) + Math.pow(points[0].y, 2));

for (var i = 1; i >= points.length; i++) {
  var z = Math.sqrt(Math.pow(points[i].x, 2) + Math.pow(points[i].y, 2));
  if(z < closestValue) {
    closestPoint = points[i];
    closestValue = z;
  }
};
var closestPoint=points[0];
var closestValue=Math.sqrt(Math.pow(点[0].x,2)+Math.pow(点[0].y,2));
对于(变量i=1;i>=points.length;i++){
var z=Math.sqrt(Math.pow(点[i].x,2)+Math.pow(点[i].y,2));
如果(z

您认为我遗漏了什么?

您的for循环控制似乎有问题。此循环:

for (var i = 1; i >= points.length; i++) {
};
(注意退出条件)不会运行,因为1(初始值
i
)正好低于数组的长度,该长度可能至少为2。另一方面,如果数组长度最多为1,则此循环将永远不会终止,因为
i
将不断增加,
i>=length
语句保持为真

您可能希望将退出条件更改为ichange


这是一道数学题吗?嗯,编程部分数学题也对吧?也许吧。你能列出你的公式以便我们追踪你的代码吗?我在这里编辑了问题你的代码很好,控制台。记录你的
变量,看看你的点是对的。数组长度是2,我已经将
最近的
变量设置为数组中索引为0的第一个元素,这就是为什么我从一开始1@JoeyHipolito在这个条件下,
i>=points.length
您试图从数组边界提取元素。@Joey Hipolito我理解您是从1开始的,但是为什么退出条件是“当我高于点计数时”而不是“当我低于点计数时”?这样,您的循环要么运行0次,要么无限次,因为如果一开始我是>points.length,那么在i++之后它会更大。
//                 ↓↓
for ( var i = 1; i >= points.length; i++ ) {
  // ...
};
//                 ↓
for ( var i = 1; i < points.length; i++ ) {
  // ...
};
function distFromOrigin( point ) {
  return Math.sqrt( Math.pow( point, 2 ) + Math.pow( point, 2 ) );
}


var closestPoint = points.reduce(
  function( closestPoint, currPoint, index, array ) {
    var currDist = distFromOrigin( currPoint ),
      closestDist = distFromOrigin( closestDist );

    if ( currDist < closestDist ) {
      return currPoint;
    } else {
      return closestPoint;
    }
  }
);