2017-08-21 5 views
0

J'ai un tableau de x/y/positions z d'un BufferGeometry, il y a près de 60 000 points (18000 valeurs),tableau positions traînants dans ThreeJS

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

je dois mélanger ces positions et obtenir le 30000 d'abord pour obtenir des points aléatoires. Je pense à convertir ce tableau en un tableau de Vector 3 avant de le mélanger pour ne pas perdre toutes les valeurs "trio".

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

J'ai besoin d'aide pour le vocabulaire. Y at-il des noms spécifiques pour ces deux tableaux s'il vous plaît? (Cela m'aiderait à découvrir les questions suivantes).

Existe-t-il des méthodes spécifiques pour convertir un tableau en un autre?

Et y a-t-il un meilleur moyen de mélanger le tableau de positions brutes?

+0

En ce qui concerne la lecture aléatoire: https://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array. A propos de la "conversion": de quoi parlez-vous exactement? C'est assez difficile de comprendre ce que tu veux me faire. Vous ne voulez probablement pas convertir un tableau, vous voulez juste le ** élaborer ** pour en tirer quelque chose, soit un nouveau tableau ou autre chose. – briosheje

+0

** J'ai besoin de mélanger ces positions et ensuite obtenir le premier 30000 pour obtenir des points aléatoires. ** S'il vous plaît élaborer, je ne comprends pas comment les points aléatoires correspondent ici – pailhead

Répondre

1

La réponse courte est: vous ne avez pas besoin de convertir en THREE.Vector3 afin d'en extraire n points aléatoires du tableau. Il n'y a pas de nom spécifique pour les deux tableaux.

Ci-dessous je fournir les fonctions pour exécuter les opérations que vous souhaitez effectuer:

Et est-il une meilleure façon de mélanger le tableau des positions brutes? (oui, voir ci-dessous)

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); 

Existe-t-il des méthodes spécifiques pour convertir un tableau en un autre? (Oui, voir ci-dessous)

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)