I wanted a way to remove overlaps from some random rectangles.
Here is the vex code – run once in a detail wrangle it loops a number of times over the points and pushes them outside while checking for overlaps
int relax_iter=chi("iter");
vector pp[];
for(int i=0;i<npoints(0);i++){
vector p1=point(0,"P",i);
push(pp,p1);
}
for(int q=0;q<relax_iter;q++){
vector newP={0,0,0};
int in=0;
for(int i=0;i<npoints(0);i++){
for(int j=0;j<npoints(0);j++){
vector min1 = pp[i]-point(0,"dimen",i);
vector max1 = pp[i]+point(0,"dimen",i);
vector p1 = pp[i];
float x1min = min1.x;
float x1max = max1.x;
float z1min = min1.z;
float z1max = max1.z;
vector min2 = pp[j]-point(0,"dimen",j);
vector max2 = pp[j]+point(0,"dimen",j);
vector p2 = pp[j];
float x2min = min2.x;
float x2max = max2.x;
float z2min = min2.z;
float z2max = max2.z;
newP = p1+rint(normalize(p1-p2)*4);
in = x1min <= x2max && x2min <= x1max && z1min <= z2max && z2min <= z1max? 1:0;
if(in){
pp[i]=newP;
}
}
}
}
for(int i=0;i<npoints(0);i++){
setpointattrib(0, "P", i, pp[i], "set");
}