Javascript 计算距离特定点最近的点 我创建了一个全景图,中间有一个罗盘,指南针指向图像的顶部中心,最初。
现在我想移动指南针相对于这一点,因为它是一个360度全景,它会创建一个相邻的副本。所以我想要的是,当你从左向右或从右向左移动时,把指南针指向离你更近的点 这是我到目前为止所做的事情,它的表现与我想要的不一样 下面是代码: 我所做的是我创造了两点: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(
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;
}
}
);