# converging point clouds

• August 6th, 2011, 11:12 PM
archi_student
converging point clouds
i dont know if anyone uses processing here, but im writing some code for simplifying point clouds

i have written code that makes a random point cloud, and the second part of the code finds the points that are close to each other in a certain tolerance, and deletes them, leaving one point in the center of the deleted group. i cant seem to get the second part of the code to work.
first part of code :

void setup() {

size (400, 400);
background(255);

int xnum = 1000;
int ynum = 1000;
int[] xarray = new int[xnum];
int[] yarray = new int[ynum];
// create random numbers

for (int i = 0; i < xnum; i++) {
for (int j = 0; j < xnum; j++) {
xarray[i] = int(random(0, 400));
yarray[j] = int(random(0, 400));
}
}
//create points
for (int i = 0; i < xnum; i++) {
for (int j = 0; j < xnum; j++) {
point(xarray[i], yarray[i]);
}
}
}

Converge(ArrayList<PVector> pts, double tol)
{
PVector[] deltaPos = new PVector[pts.length];
boolean check = false;
tol = tol * tol;
for (int i = 0; i < pts.length; i++)
{
deltaPos[i] = PVector.sub(LocalCentroid(pts[i], pts, tol), pts[i]);
if (deltaPos[i].x + deltaPos[i].y > ModelAbsoluteTolerance) // ModelAbsoluteTolerance: to be defined!
{
check = true;
}
}
for (int i = 0; i < pts.length; i++)
{
}
return check;
}

LocalCentroid(PVector p, ArrayList<PVector> pts, double tolSqr)
{
PVector cntr = new PVector(0, 0);
int count = 0;
for (int i = 0; i < pts.length; i++)
{
PVector testVec = PVector.sub(pts[i], p);
double lsqr = testVec.x * testVec.x + testVec.y * testVec.y;
if (lsqr < tolSqr)
{
count += 1;
}
}
return PVector.div(cntr, count);
}
• August 7th, 2011, 07:25 AM
Norm
Re: converging point clouds
Quote:

i cant seem to get the second part of the code to work.