Advertisement
Guest User

Untitled

a guest
May 19th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 2.05 KB | None | 0 0
  1. let mkMultiJitter n =
  2.     let sampleSize = (float n)
  3.     let increment = 1.0/(sampleSize)
  4.     let inc = 1.0/(sampleSize**2.0)
  5.  
  6.     let mutable ylist = [||]
  7.     let mutable xlist = [||]
  8.     let mutable innerLoopYcordarray = [||]
  9.     let mutable innerLoopXcordarray = [||]
  10.     let addx a =
  11.         innerLoopXcordarray <- Array.append innerLoopXcordarray [|a|]
  12.     let addy b =
  13.         innerLoopYcordarray <- Array.append innerLoopYcordarray [|b|]
  14.     let appendY c =
  15.         ylist <- Array.append ylist [|c|]
  16.     let appendX c =
  17.         xlist <- Array.append xlist [|c|]
  18.  
  19.     let mutable count = 0.0
  20.     let mutable y = 0.0
  21.  
  22.     // while loop used, because F# can't increment "y" in-loop.
  23.     while y < (1.0-inc)
  24.         do
  25.         //emptying arrays for each iteration
  26.         innerLoopYcordarray <- [||]
  27.         innerLoopXcordarray <- [||]
  28.         for x:float in [(inc+count) .. increment .. 1.0]
  29.             do
  30.             y <- y + inc
  31.  
  32.             //randomize cords within a 1/n^2 box
  33.             addx (randomInBound x inc)
  34.             addy (randomInBound y inc)
  35.         count <- count + inc
  36.  
  37.         for x in innerLoopXcordarray
  38.             do
  39.             appendX x
  40.         for y in innerLoopYcordarray
  41.             do
  42.             appendY y
  43.      
  44.     let cordList = combineXY xlist ylist
  45.    
  46.     // randomize y values (n-rooks)
  47.     for i in [0 .. (n-1)]
  48.         do
  49.         for j in [0 .. (n-1)]
  50.             do
  51.             let rn = ran.Next(0, n)
  52.             let (tmpx,tmpy,_) = cordList.[i+(j*n)]
  53.             let (rnx,rny,_) = cordList.[i + (rn*n)]
  54.             cordList.[i+(n*j)] <- (rnx,tmpy,0.0)
  55.             cordList.[(rn*n)+i] <- (tmpx,rny,0.0)
  56.  
  57.         // randomize x values (n-rooks)
  58.     for i in [0 .. (n-1)]
  59.         do
  60.         for j in [0 .. (n-1)]
  61.             do
  62.             let rn = ran.Next(0, n)
  63.             let (tmpx,tmpy,_) = cordList.[j+(i*n)]
  64.             let (rnx,rny,_) = cordList.[rn + (i*n)]
  65.             cordList.[j+(n*i)] <- (rnx,tmpy,0.0)
  66.             cordList.[(i*n)+rn] <- (tmpx,rny,0.0)
  67.  
  68.     cordList
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement