import java.lang.Math; import ij.gui.NewImage; import java.awt.Point; import java.util.Set; import java.util.HashSet; import java.util.ArrayList; import ij.gui.GenericDialog; import ij.IJ; helpURL = "https://github.com/MontpellierRessourcesImagerie/imagej_macros_and_scripts/wiki/MRI_Spiral_Mosaic_Tool"; options = ij.Macro.getOptions(); IJ.log(options); east = new Point(1, 0); north = new Point(0, -1); west = new Point(-1, 0); south = new Point(0, 1); TURNLEFT = false; START_DIRECTION = north; int[] quaterSquares = {0,0,1,2,4,6,9,12,16,20,25,30,36,42,49,56,64,72,81,90,100,110,121,132,144,156,169,182,196,210,225,240,256,272,289,306,324,342,361,380,400,420,441,462,484,506,529,552,576,600,625,650,676,702,729,756,784,812}; nextQuarterSquareFor(n) { for (qs : quaterSquares) { if (qs >= n) return qs; } return -1; } indexOfNextQuarterSquareFor(n) { index=0; for (qs : quaterSquares) { if (qs >= n) return index; index++; } return -1; } Point turnLeft(Point direction) { result = south; if (direction.equals(south)) result = east; if (direction.equals(east)) result = north; if (direction.equals(north)) result = west; return result; } Point turnRight(Point direction) { result = north; if (direction.equals(south)) result = west; if (direction.equals(east)) result = south; if (direction.equals(north)) result = east; return result; } relativePositions(n) { Set burnedPoints = new HashSet(); positions = new ArrayList(); direction = START_DIRECTION; currentPosition = new Point(0,0); for (i=0; i