javascript - 在 ThreeJS 中打乱位置数组

标签 javascript arrays sorting three.js

我有一个来自 BufferGeometry 的 x/y/z 位置数组,有近 60000 个点(18000 个值),

[3, 2, 1, 3, 2, 1, 3, 2, 1, ...]

我需要对这些位置进行洗牌,然后先获得 30000 以获得随机点。我正在考虑在洗牌之前将此数组转换为 Vector 3 数组,以免丢失所有“三重奏”值。

    [new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), new THREE.Vector3(3, 2, 1), ...]

我需要词汇帮助。 请问这两个数组有具体名称吗? (这将帮助我了解接下来的问题)。

是否有将数组转换为另一个数组的特定方法?

有没有最好的方法来洗牌原始位置数组?

最佳答案

简短的答案是:您不需要转换为 THREE.Vector3 即可从数组中提取 n 个随机点。这两个数组都没有特定的名称。

下面我提供了执行您想要执行的操作的函数:

有没有最好的方法来洗牌原始位置数组? (是的,见下文)

var points = [5, 6, 7, 3, 2, 1, 5, 6, 7, 3, 2, 1, 5, 6, 7]

// Assuming there are more points than the number of points you need to get back
function getRandomPoints (points, numberOfPoints) {
  var resultPoints = []
  for (var i = 0; i < numberOfPoints; i++) {
    // Get a random index
    var randomIndex = Math.floor(Math.random() * points.length);
    var index = (randomIndex - randomIndex % 3)
    resultPoints.push(points[index])
    resultPoints.push(points[index + 1])
    resultPoints.push(points[index + 2])
    points.splice(index, index + 3);
  }

  return resultPoints;
}

var randomPoints = getRandomPoints(points, 2);

是否有将数组转换为另一个数组的特定方法? (是的,见下文)

var points = [5, 6, 7, 3, 2, 1, 5, 6, 7, 3, 2, 1, 5, 6, 7]

function convertToVector (points) {
  var resultPoints = []
  for (var i = 0; i < points.length; i = i + 3) {
    var vectorPoint = new THREE.Vector3(points[i], points[i + 1], points[i + 2])
    resultPoints.push(vectorPoint)
  }
  return resultPoints
}

var convertedPoints = convertToVector(points)

关于javascript - 在 ThreeJS 中打乱位置数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45801930/

相关文章:

javascript - 比较两个不同数组的值

更改 char* 数组中元素的地址? C

c# - 在 Reactive Extensions 中按预定义的顺序对 Observable 进行排序

python - 如何用两个键对 lambda 进行排序?

javascript - 将 DOM 元素插入变量并使用其属性与不使用变量执行相同操作之间的区别

javascript - 永久启用按钮并使用 jQuery 和 LocalStorage 更改其图像 src

javascript根据条件从嵌套的对象数组返回属性值

Ruby:按字母顺序对包含一些字符串数组的字符串数组进行排序

javascript - 如何防止 td 中的文本破坏表格的对齐方式?

javascript - HTML 表格的内联编辑