2016-06-16 2 views
1

J'ai un nombre N de points aléatoires (dans ce cas 20), avec des contraintes X, Y et Z.Forme de trois.js à partir de points aléatoires

Comment puis-je créer une forme quelconque (de préférence fermée) (à l'aide de la bibliothèque Three.js), donnée et commençant seulement à partir de N points aléatoires.

Il existe probablement plusieurs variantes, veuillez les partager.

var program = new Program(reset,step) 
program.add('g',false) 
function reset() { 
    scene.clear() 
    scene.add(new THREE.GridHelper(100,1)) 
} 
function step() { 

} 


program.startup() 



var numpoints = 20; 
var dots = []; //If you want to use for other task 

for (var i = 0 ; i < numpoints ; i++){ 
    var x = Math.random() * (80 - 1) + 1 //Math.random() * (max - min) + min 
    var y = Math.random() * (80 - 1) + 1 
    var z = Math.random() * (80 - 1) + 1 

    var dotGeometry = new THREE.Geometry(); 
    dots.push(dotGeometry); 
    dotGeometry.vertices.push(new THREE.Vector3(x, y, z)); 
    var dotMaterial = new THREE.PointsMaterial({ size: 3, sizeAttenuation: false, color: 0xFF0000 }); 
    var dot = new THREE.Points(dotGeometry, dotMaterial); 

    scene.add(dot); 
} 

Triangulation, Voronoi, je ne se soucient pas, me montrer toutes les idées que vous avez, je vais en apprendre beaucoup!

+0

ne sait pas s'il y a un moyen intégré mais si vous êtes intéressé par l'algorithme mathématique http://stackoverflow.com/questions/828905/polygon-enclosing-a-set-of-points –

+0

Je ne ed pour faire une certaine forme et que de déplacer différents "volumes" en elle. Je suis un débutant, mais je n'ai pas beaucoup de temps pour apprendre JS et Three.js maintenant. Faire des algorithmes par moi-même est un peu difficile pour moi, mais quand je vois un code, j'ai assez de compétences pour le déboguer/le modifier/le comprendre. Je vais regarder le lien que vous avez fourni, merci pour info! – alex747

+0

vous avez raison.vous pourriez trouver l'algorithme de 'convex coque 3d' basé sur javascript déjà écrit par quelqu'un. Mais je viens de trouver l'exemple avec three.js ici https://www.packtpub.com/packtlib/book/Web-Development/9781784392215 /6/ch06lvl1sec32/THREE.ConvexGeometry.also celui-ci http://www.initcode.info/3d_convex_hull_algorithm_similar_to_matlab39_s_convhulln.vous pouvez trouver plus d'exemples que vous n'avez pas besoin d'écrire l'algorithme –

Répondre

3

Vous pouvez créer un polyèdre qui est la coque convexe d'un ensemble de points 3D en utilisant un modèle comme ceci:

var points = [ 
    new THREE.Vector3(100, 0, 0), 
    new THREE.Vector3(0, 100, 0), 
    ... 
    new THREE.Vector3(0, 0, 100) 
]; 

var geometry = new THREE.ConvexGeometry(points); 

var material = new THREE.MeshPhongMaterial({ 
    color: 0xff0000, 
    shading: THREE.FlatShading 
}); 

mesh = new THREE.Mesh(geometry, material); 
scene.add(mesh); 

Vous devez inclure les éléments suivants dans votre projet

<script src="/examples/js/geometries/ConvexGeometry.js"></script> 

trois .js r.78

+1

Bienvenue sur stackoverflow. N'oubliez pas d'accepter les réponses en cliquant sur la coche. Je vous remercie. – WestLangley