public class ParticleSquare { private final List lines; public ParticleSquare(List lines) { this.lines = lines; } public static ParticleSquare interpolate(Vector start, Vector end, int pointCount) { double distance = start.distance(end); double distanceBetween = distance / pointCount; return interpolate(start, end, distanceBetween); } public static ParticleSquare interpolate(Vector start, Vector end, double distanceBetween) { double minX = Math.min(start.getX(), end.getX()); double minY = Math.min(start.getY(), end.getY()); double minZ = Math.min(start.getZ(), end.getZ()); double maxX = Math.max(start.getX(), end.getX()); double maxZ = Math.max(start.getZ(), end.getZ()); List lines = new ArrayList<>(4); Vector point1 = new Vector(minX, minY, minZ); Vector point2 = new Vector(maxX, minY, minZ); Vector point3 = new Vector(maxX, minY, maxZ); Vector point4 = new Vector(minX, minY, maxZ); lines.add(ParticleLine.interpolate(point1, point2, distanceBetween)); lines.add(ParticleLine.interpolate(point2, point3, distanceBetween)); lines.add(ParticleLine.interpolate(point3, point4, distanceBetween)); lines.add(ParticleLine.interpolate(point4, point1, distanceBetween)); return new ParticleSquare(lines); } public List getLines() { return List.copyOf(lines); } }