1 people like it.

perlin noise

 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
module PerlinNoise
open System
open System.Drawing

let perlinNoise width height persistence octaves zoom seed bias amplitudeBias handler =
    let noise x y =
        let n = x + y * 57;
        let n = (n <<< 13) ^^^ n
        1.0 - (float ((n * (n * n * 15731 + 789221) + 1376312589) &&& 0x7fffffff)) / 1073741824.0
    let interpolate x y a =
        let f = (1.0 - (cos (a * Math.PI))) * 0.5
        x * (1.0 - f) + y * f
    let smoothedNoise x y =
        let xi = int x |> float
        let yi = int y |> float
        let xfrac = (x - xi) |> float
        let yfrac = (y - yi) |> float
        let xi = xi |> int
        let yi = yi |> int
        let v1 = noise xi yi
        let v2 = noise (xi + 1) yi
        let v3 = noise xi (yi + 1)
        let v4 = noise (xi + 1) (yi + 1)
        let s = interpolate v1 v2 xfrac
        let t = interpolate v3 v4 xfrac
        interpolate s t yfrac
    let pixel x y =
        seq { 0 .. octaves - 1 }
        |> Seq.sumBy (fun octave -> let octave = float octave
                                    let frequency = 0.0098976543 * (octave ** 2.0)
                                    let amplitude = (persistence ** octave) * 0.917183 * amplitudeBias
                                    smoothedNoise ((float (x + seed)) * frequency / zoom) ((float (y + seed)) * frequency / zoom) |> (*) amplitude)
    for x in 0 .. width - 1 do
        for y in 0 .. height - 1 do
            pixel x y |> (+) bias |> handler x y

let generate () =
    let width = 10000
    let height = 10000
    let bitmap = new Bitmap(width, height)
    let prng = new Random()
    (fun x y v -> let c = (v + 0.5) * 255.0 |> int |> min 255 |> max 0
                  bitmap.SetPixel(x, y, Color.FromArgb(c, c, c)))
    |> perlinNoise width height 0.5 8 10.87654321 (prng.Next() % (Int32.MaxValue / 4)) 0.1368 0.96
    bitmap.Save(@"c:\users\sthalik\desktop\perlin-noise.jpg")

generate ()
module PerlinNoise
namespace System
namespace System.Drawing
val perlinNoise : width:int -> height:int -> persistence:float -> octaves:int -> zoom:float -> seed:int32 -> bias:float -> amplitudeBias:float -> handler:(int32 -> int32 -> float -> unit) -> unit

Full name: PerlinNoise.perlinNoise
val width : int
val height : int
val persistence : float
val octaves : int
val zoom : float
val seed : int32
val bias : float
val amplitudeBias : float
val handler : (int32 -> int32 -> float -> unit)
val noise : (int -> int -> float)
val x : int
val y : int
val n : int
Multiple items
val float : value:'T -> float (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.float

--------------------
type float = Double

Full name: Microsoft.FSharp.Core.float

--------------------
type float<'Measure> = float

Full name: Microsoft.FSharp.Core.float<_>
val interpolate : (float -> float -> float -> float)
val x : float
val y : float
val a : float
val f : float
val cos : value:'T -> 'T (requires member Cos)

Full name: Microsoft.FSharp.Core.Operators.cos
type Math =
  static val PI : float
  static val E : float
  static member Abs : value:sbyte -> sbyte + 6 overloads
  static member Acos : d:float -> float
  static member Asin : d:float -> float
  static member Atan : d:float -> float
  static member Atan2 : y:float * x:float -> float
  static member BigMul : a:int * b:int -> int64
  static member Ceiling : d:decimal -> decimal + 1 overload
  static member Cos : d:float -> float
  ...

Full name: System.Math
field Math.PI = 3.14159265359
val smoothedNoise : (float -> float -> float)
val xi : float
Multiple items
val int : value:'T -> int (requires member op_Explicit)

Full name: Microsoft.FSharp.Core.Operators.int

--------------------
type int = int32

Full name: Microsoft.FSharp.Core.int

--------------------
type int<'Measure> = int

Full name: Microsoft.FSharp.Core.int<_>
val yi : float
val xfrac : float
val yfrac : float
val xi : int
val yi : int
val v1 : float
val v2 : float
val v3 : float
val v4 : float
val s : float
val t : float
val pixel : (int32 -> int32 -> float)
val x : int32
val y : int32
Multiple items
val seq : sequence:seq<'T> -> seq<'T>

Full name: Microsoft.FSharp.Core.Operators.seq

--------------------
type seq<'T> = Collections.Generic.IEnumerable<'T>

Full name: Microsoft.FSharp.Collections.seq<_>
module Seq

from Microsoft.FSharp.Collections
val sumBy : projection:('T -> 'U) -> source:seq<'T> -> 'U (requires member ( + ) and member get_Zero)

Full name: Microsoft.FSharp.Collections.Seq.sumBy
val octave : int
val octave : float
val frequency : float
val amplitude : float
val generate : unit -> unit

Full name: PerlinNoise.generate
val bitmap : Bitmap
Multiple items
type Bitmap =
  inherit Image
  new : filename:string -> Bitmap + 11 overloads
  member Clone : rect:Rectangle * format:PixelFormat -> Bitmap + 1 overload
  member GetHbitmap : unit -> nativeint + 1 overload
  member GetHicon : unit -> nativeint
  member GetPixel : x:int * y:int -> Color
  member LockBits : rect:Rectangle * flags:ImageLockMode * format:PixelFormat -> BitmapData + 1 overload
  member MakeTransparent : unit -> unit + 1 overload
  member SetPixel : x:int * y:int * color:Color -> unit
  member SetResolution : xDpi:float32 * yDpi:float32 -> unit
  member UnlockBits : bitmapdata:BitmapData -> unit
  ...

Full name: System.Drawing.Bitmap

--------------------
Bitmap(filename: string) : unit
   (+0 other overloads)
Bitmap(stream: IO.Stream) : unit
   (+0 other overloads)
Bitmap(original: Image) : unit
   (+0 other overloads)
Bitmap(filename: string, useIcm: bool) : unit
   (+0 other overloads)
Bitmap(type: Type, resource: string) : unit
   (+0 other overloads)
Bitmap(stream: IO.Stream, useIcm: bool) : unit
   (+0 other overloads)
Bitmap(width: int, height: int) : unit
   (+0 other overloads)
Bitmap(original: Image, newSize: Size) : unit
   (+0 other overloads)
Bitmap(width: int, height: int, format: Imaging.PixelFormat) : unit
   (+0 other overloads)
Bitmap(width: int, height: int, g: Graphics) : unit
   (+0 other overloads)
val prng : Random
Multiple items
type Random =
  new : unit -> Random + 1 overload
  member Next : unit -> int + 2 overloads
  member NextBytes : buffer:byte[] -> unit
  member NextDouble : unit -> float

Full name: System.Random

--------------------
Random() : unit
Random(Seed: int) : unit
val v : float
val c : int
val min : e1:'T -> e2:'T -> 'T (requires comparison)

Full name: Microsoft.FSharp.Core.Operators.min
val max : e1:'T -> e2:'T -> 'T (requires comparison)

Full name: Microsoft.FSharp.Core.Operators.max
Bitmap.SetPixel(x: int, y: int, color: Color) : unit
type Color =
  struct
    member A : byte
    member B : byte
    member Equals : obj:obj -> bool
    member G : byte
    member GetBrightness : unit -> float32
    member GetHashCode : unit -> int
    member GetHue : unit -> float32
    member GetSaturation : unit -> float32
    member IsEmpty : bool
    member IsKnownColor : bool
    ...
  end

Full name: System.Drawing.Color
Color.FromArgb(argb: int) : Color
Color.FromArgb(alpha: int, baseColor: Color) : Color
Color.FromArgb(red: int, green: int, blue: int) : Color
Color.FromArgb(alpha: int, red: int, green: int, blue: int) : Color
Random.Next() : int
Random.Next(maxValue: int) : int
Random.Next(minValue: int, maxValue: int) : int
type Int32 =
  struct
    member CompareTo : value:obj -> int + 1 overload
    member Equals : obj:obj -> bool + 1 overload
    member GetHashCode : unit -> int
    member GetTypeCode : unit -> TypeCode
    member ToString : unit -> string + 3 overloads
    static val MaxValue : int
    static val MinValue : int
    static member Parse : s:string -> int + 3 overloads
    static member TryParse : s:string * result:int -> bool + 1 overload
  end

Full name: System.Int32
field int.MaxValue = 2147483647
Image.Save(filename: string) : unit
Image.Save(stream: IO.Stream, format: Imaging.ImageFormat) : unit
Image.Save(filename: string, format: Imaging.ImageFormat) : unit
Image.Save(stream: IO.Stream, encoder: Imaging.ImageCodecInfo, encoderParams: Imaging.EncoderParameters) : unit
Image.Save(filename: string, encoder: Imaging.ImageCodecInfo, encoderParams: Imaging.EncoderParameters) : unit
Raw view Test code New version

More information

Link:http://fssnip.net/9i
Posted:14 years ago
Author:
Tags: