/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package automenta.spacenet.run.old.physics; import automenta.spacenet.space.geom.ConvexHull; import automenta.spacenet.run.ArdorSpacetime; import automenta.spacenet.space.Repeat; import automenta.spacenet.space.geom.ProcessBox; import automenta.spacenet.var.physical.Color; import automenta.spacenet.var.Maths; import com.ardor3d.scenegraph.Spatial; import java.util.LinkedList; import java.util.List; import javax.vecmath.Vector3f; /** * generate and display a dynamically animated convex hull */ public class DemoMultiBlobs extends ProcessBox { int numCells = 7; final static int pointsPerCell = 32; final static int pointsOverlap = 4; final List<Vector3f> cellCenters = new LinkedList(); final List<ConvexHull> cellHulls = new LinkedList(); final List<List<Vector3f>> cellPoints = new LinkedList(); @Override protected void start() { for (int c = 0; c < numCells; c++) { double cx = Maths.random(-4, 4); double cy = Maths.random(-4, 4); double cz = Maths.random(-4, 4); cellCenters.add(new Vector3f((float) cx, (float) cy, (float) cz)); List<Vector3f> points = new LinkedList(); if (c > 0) { List<Vector3f> prevPoints = cellPoints.get(c-1); for (int i = 0; i < pointsOverlap; i++) { points.add(prevPoints.get(prevPoints.size()-1-pointsOverlap+i)); } } for (int i = (c == 0 ? 0 : pointsOverlap); i < pointsPerCell; i++) { double px = Maths.random(-0.5, 0.5)+cx; double py = Maths.random(-0.5, 0.5)+cy; double pz = Maths.random(-0.5, 0.5)+cz; points.add(new Vector3f((float) px, (float) py, (float) pz)); } cellPoints.add(points); final ConvexHull hull = add(new ConvexHull(points)); //hull.color(Color.newRandomHSB(0.25, 1.0)); cellHulls.add(hull); } // add(new Repeat(0.05) { // // @Override protected void update(double t, double dt, Spatial s) { // double d = 0.01; // for (Vector3f v : points) { // v.x += Maths.random(-d, d); // v.y += Maths.random(-d, d); // v.z += Maths.random(-d, d); // } // // //change points // hull.setPoints(points); // } // }); } public static void main(String[] args) { ArdorSpacetime.newWindow(new DemoMultiBlobs()); } }