public void normalize() { objectsNeedRebuild = true; rebuild(); warp_Vector min, max, tempmax, tempmin; if (objects == 0) { return; } matrix = new warp_Matrix(); normalmatrix = new warp_Matrix(); max = wobject[0].maximum(); min = wobject[0].maximum(); for (int i = 0; i < objects; i++) { tempmax = wobject[i].maximum(); tempmin = wobject[i].maximum(); if (tempmax.x > max.x) { max.x = tempmax.x; } if (tempmax.y > max.y) { max.y = tempmax.y; } if (tempmax.z > max.z) { max.z = tempmax.z; } if (tempmin.x < min.x) { min.x = tempmin.x; } if (tempmin.y < min.y) { min.y = tempmin.y; } if (tempmin.z < min.z) { min.z = tempmin.z; } } float xdist = max.x - min.x; float ydist = max.y - min.y; float zdist = max.z - min.z; float xmed = (max.x + min.x) / 2; float ymed = (max.y + min.y) / 2; float zmed = (max.z + min.z) / 2; float diameter = (xdist > ydist) ? xdist : ydist; diameter = (zdist > diameter) ? zdist : diameter; normalizedOffset = new warp_Vector(xmed, ymed, zmed); normalizedScale = 2 / diameter; shift(normalizedOffset.reverse()); scale(normalizedScale); }