run("Set Scale...", "distance=0 known=0 pixel=1 unit=pixel"); setTool("multipoint"); waitForUser("Click on Four Spots then Click OK"); if (selectionType==-1) exit("Selection required"); getSelectionCoordinates(x, y); getPixelSize(unit, pixelWidth, pixelHeight); run("Clear Results"); count = 0; n = x.length+2; lambdaL = 225.8; if (n-2<4 || n-2>4) exit("ERROR!! You must Select 4 points"); d12 = sqrt((x[1]-x[0])*(x[1]-x[0])+(y[1]-y[0])*(y[1]-y[0])); d13 = sqrt((x[2]-x[0])*(x[2]-x[0])+(y[2]-y[0])*(y[2]-y[0])); d14 = sqrt((x[3]-x[0])*(x[3]-x[0])+(y[3]-y[0])*(y[3]-y[0])); d23 = sqrt((x[2]-x[1])*(x[2]-x[1])+(y[2]-y[1])*(y[2]-y[1])); d24 = sqrt((x[3]-x[1])*(x[3]-x[1])+(y[3]-y[1])*(y[3]-y[1])); d34 = sqrt((x[3]-x[2])*(x[3]-x[2])+(y[3]-y[2])*(y[3]-y[2])); distances = newArray(d12, d13, d14, d23, d24, d34); Array.getStatistics(distances,min,max,mean,stdDev); x1 = x[0]; x2 = x[1]; x3 = x[2]; x4 = x[3]; y1 = y[0]; y2 = y[1]; y3 = y[2]; y4 = y[3]; if (max == d12) { text1 = "1 and 2"; text2 = "3 and 4"; pair1 = newArray(x1,y1,x2,y2,d12); pair2 = newArray(x3,y3,x4,y4,d34); } else if (max==d13) { text1 = "1 and 3"; text2 = "2 and 4"; pair1 = newArray(x1,y1,x3,y3,d13); pair2 = newArray(x2,y2,x4,y4,d24); } else if (max==d14) { text1 = "1 and 4"; text2 = "2 and 3"; pair1 = newArray(x1,y1,x4,y4,d14); pair2 = newArray(x2,y2,x3,y3,d23); } else if (max==d23) { text1 = "2 and 3"; text2 = "1 and 4 "; pair1 = newArray(x2,y2,x3,y3,d23); pair2 = newArray(x1,y1,x4,y4,d14); } else if (max== d24) { text1 = "2 and 4"; text2 = "1 and 3"; pair1 = newArray(x2,y2,x4,y4,d24); pair2 = newArray(x1,y1,x3,y3,d13); } else { text1 = "3 and 4"; text2 = "1 and 2"; pair1 = newArray(x3,y3,x4,y4,d34); pair2 = newArray(x1,y1,x2,y2,d12); } slope1 = (pair1[3]-pair1[1])/(pair1[2]-pair1[0]); slope2 = (pair2[3]-pair2[1])/(pair2[2]-pair2[0]); b1 = pair1[1] - slope1*pair1[0]; b2 = pair2[1] - slope2*pair2[0]; xintercept = (b2-b1)/(slope1-slope2); yintercept = slope1*xintercept + b1; g11 = sqrt((pair1[0]-xintercept)*(pair1[0]-xintercept)+(pair1[1]-yintercept)*(pair1[1]-yintercept)); g12 = sqrt((pair1[2]-xintercept)*(pair1[2]-xintercept)+(pair1[3]-yintercept)*(pair1[3]-yintercept)); g21 = sqrt((pair2[0]-xintercept)*(pair2[0]-xintercept)+(pair2[1]-yintercept)*(pair2[1]-yintercept)); g22 = sqrt((pair2[2]-xintercept)*(pair2[2]-xintercept)+(pair2[3]-yintercept)*(pair2[3]-yintercept)); g1 = (g11 + g12)/2; g2 = (g21 + g22)/2; cosTheta = ((pair1[0]-xintercept)*(pair2[0]-xintercept) + (pair1[1]-yintercept)*(pair2[1]-yintercept))/(g1*g2); theta = (180*acos(cosTheta))/PI; d1 = (lambdaL)/g1; d2 = (lambdaL)/g2; setResult("g",0,g1); setResult("d",0,d1); setResult("g",1,g2); setResult("d",1,d2); setResult("Angle",0,theta); setResult("Angle",1,180-theta); updateResults();