如何根据位置找到最近的点?

时间:2015-09-01 08:59:14

标签: javascript math three.js

我有一组这样排列的球体:

enter image description here

每个球体彼此等距。为此我的代码是:

geometry = new THREE.SphereGeometry(1.2);
material = new THREE.MeshPhongMaterial({
    color: 0xe0e0e0
})

for (var zPos = -120, i = 0; zPos <= 120; zPos += 7, i++) {

    arr[i] = [];

    for (var xPos = -120, j = 0; xPos <= 120; xPos += 7, j++) {

        arr[i][j] = "(" + i + "," + j + ")";

        sphere = new THREE.Mesh(geometry, material);
        sphere.position.set(xPos, 0, zPos);
        sphere.name = i + "-" + j;
        count++;
        sphere.receiveShadow = true;
        sphereMesh.add(sphere);
    }
    rows++;
}

scene.add(sphereMesh);

此处sphereMesh是一个组。

现在我的问题是,当我给出一个特定的位置作为输入时,应该选择接近某个半径的位置的球体,并且它们应该改变它们的颜色。

如何找到该位置附近的球体?

1 个答案:

答案 0 :(得分:1)

只测量 givenPoint sphere 之间的距离,并测试它与任意限制之间的距离。 只是一个例子,假设 givenPoint THREE.Vector3 sphere THREE.Mesh

var limit = 2;
var distance = Math.sqrt(Math.pow(sphere.position.x - givenPoint.x, 2) + Math.pow(sphere.position.y - givenPoint.y));
if (distance > limit)
{
   // is out
} 
else
{
   // is in
}

然后你可以添加几个断点,以便说明 givenPoint 附近有一个球体,或者更好地规范它并得到一个比例:

var normalized = 1 - distance / limit