#pragma rtGlobals=1 // Use modern global access method. Menu "simulation" "Calc SAW or Gauss Compiled" "-" submenu "Parts" "calculate gaussian" "Calculate SAW" end end Macro CalculateGaussian(name,npt) string/g gname variable/g gnpt string name=gname variable npt=gnpt prompt name,"Enter the base name for x, y z waves" prompt npt,"Enter number of steps in chain (10,000)" silent 1 gname=name;gnpt=npt variable counter=1//npt=10000, string xpos="xpos_"+name,ypos="ypos_"+name,zpos="zpos_"+name make/n=(npt)/o $xpos=0, $ypos=0, $zpos=0 variable xtst=enoise(100),ytst=enoise(100),ztst=enoise(100),addint=enoise(100) do xtst=enoise(100);ytst=enoise(100);ztst=enoise(100);addint=enoise(100) addint=(addint/abs(addint)) do if((xtst>ytst)&&(xtst>ztst)) $xpos[counter]=addint+$xpos[counter-1] $ypos[counter]=$ypos[counter-1] $zpos[counter]=$zpos[counter-1] break endif if((ytst>xtst)&&(ytst>ztst)) $ypos[counter]=addint+$ypos[counter-1] $xpos[counter]=$xpos[counter-1] $zpos[counter]=$zpos[counter-1] break endif if((ztst>ytst)&&(ztst>xtst)) $zpos[counter]=addint+$zpos[counter-1] $ypos[counter]=$ypos[counter-1] $xpos[counter]=$xpos[counter-1] break endif break while(0) counter+=1 print counter while(counterytst)&&(xtst>ztst)) xpos[counter]=addint+xpos[counter-1] ypos[counter]=ypos[counter-1] zpos[counter]=zpos[counter-1] break endif if((ytst>xtst)&&(ytst>ztst)) ypos[counter]=addint+ypos[counter-1] xpos[counter]=xpos[counter-1] zpos[counter]=zpos[counter-1] break endif if((ztst>ytst)&&(ztst>xtst)) zpos[counter]=addint+zpos[counter-1] ypos[counter]=ypos[counter-1] xpos[counter]=xpos[counter-1] break endif break while(0) counter+=1 countprint+=1 if(countprint>300) print counter countprint=0 endif while(counterytst)&&(xtst>ztst)) xpos[counter]=addint+xpos[counter-1] ypos[counter]=ypos[counter-1] zpos[counter]=zpos[counter-1] do if(xpos[countB]==xpos[counter]&&ypos[countB]==ypos[counter]&&zpos[countB]==zpos[counter]) xpos[counter]=xpos[counter-1] counter-=1 endif countB+=1 while(countBxtst)&&(ytst>ztst)) ypos[counter]=addint+ypos[counter-1] xpos[counter]=xpos[counter-1] zpos[counter]=zpos[counter-1] do if(xpos[countB]==xpos[counter]&&ypos[countB]==ypos[counter]&&zpos[countB]==zpos[counter]) ypos[counter]=ypos[counter-1] counter-=1 endif countB+=1 while(countBytst)&&(ztst>xtst)) zpos[counter]=addint+zpos[counter-1] ypos[counter]=ypos[counter-1] xpos[counter]=xpos[counter-1] do if(xpos[countB]==xpos[counter]&&ypos[countB]==ypos[counter]&&zpos[countB]==zpos[counter]) zpos[counter]=zpos[counter-1] counter-=1 endif countB+=1 while(countB216)//then you have reached a deadend and have to back track to continue, say 100 back //216 is 6^3 counter-=100 countC=0 endif else countC=0 endif countprint+=1 if(countprint>300) print counter countprint=0 endif while(counterytst)&&(xtst>ztst)) $xpos[counter]=addint+$xpos[counter-1] $ypos[counter]=$ypos[counter-1] $zpos[counter]=$zpos[counter-1] do if($xpos[countB]==$xpos[counter]&&$ypos[countB]==$ypos[counter]&&$zpos[countB]==$zpos[counter]) $xpos[counter]=$xpos[counter-1] counter-=1 endif countB+=1 while(countBxtst)&&(ytst>ztst)) $ypos[counter]=addint+$ypos[counter-1] $xpos[counter]=$xpos[counter-1] $zpos[counter]=$zpos[counter-1] do if($xpos[countB]==$xpos[counter]&&$ypos[countB]==$ypos[counter]&&$zpos[countB]==$zpos[counter]) $ypos[counter]=$ypos[counter-1] counter-=1 endif countB+=1 while(countBytst)&&(ztst>xtst)) $zpos[counter]=addint+$zpos[counter-1] $ypos[counter]=$ypos[counter-1] $xpos[counter]=$xpos[counter-1] do if($xpos[countB]==$xpos[counter]&&$ypos[countB]==$ypos[counter]&&$zpos[countB]==$zpos[counter]) $zpos[counter]=$zpos[counter-1] counter-=1 endif countB+=1 while(countB