Giter Club home page Giter Club logo

wagashibox's Introduction

WagashiBox

F#でVisualizationする適当なやつ。 ただしWPFのShapeを使っているので重い。

使い方

wagashiのコンピュテーション式内で絵を描くコマンドを呼んでWagashiBox.showを呼び出す。

## コマンド NodeBoxを参考にしたコマンドが使えます。

描画

// 線を引く
line(x1, y1, x2, y2)

// 四角形を描く
rect(x, y, width, height)

// 円を描く
oval(x, y, width, height)

// 多角形を描く
polygon(points: (float * float) list)

// 連続直線を描く
polyline(points: (float * float) list)

// 塗りつぶし色の指定
fill color

// 描画色の指定
stroke color

// 塗りつぶしなしに指定
nofill ()

// 描画色なしに指定
noStroke ()

// 描画幅の指定
strokeWidth width

// 図形の平行移動
translate (x, y)

// 回転角度の指定
rotate degrees

// 図形の拡大・縮小
scale (x, y)

RGB, HSB, HUSL色空間が使用可能。

// R(Red: 0.0 - 1.0), G(Green: 0.0 - 1.0), B(Blue: 0.0 - 1.0)
type RGB = {R:float; G:float; B:float}

// H(Hue: 0.0 - 1.0), S(Saturation: 0.0 - 1.0), B(Brightness: 0.0 - 1.0)
type HSB = {H:float; S:float; B:float}

// H(hue:0 - 1.0), S(Saturatoin: 0.0 - 1.0), L(lightness: 0 - 1.0
type HUSL ={H:float; S:float; L:float}

各コマンドは色の型としてSystem.Windows.Media.Colorを受ける 各色空間での変換は以下の通り

// System.Windows.Media.ColorをRGB型に変換
let rgb = Colors.AliceBlue.ToRGB()

// System.Windows.Media.ColorをHUSL型に変換
let husl = Colors.AliceBlue.ToHUSL()

// System.Windows.Media.ColorをHSB型に変換
let hsb = Colors.AliceBlue.ToHSB()

// RGB型をSystem.Windows.Media.Colorに変換
let color = rgb.ToColor()

// HUSL型をSystem.Windows.Media.Colorに変換
let color = husl.ToColor()

// HSB型をSystem.Windows.Media.Colorに変換
let color = hsb.ToColor()

ユーティリティ

// パーリンノイズ
// use SimplexNoise https://code.google.com/p/simplexnoise/
// -1.0 ~ 1.0 のノイズを返す
noise(x)

noise2d(x, y)

noise3d(x, y, z)

// 乱数
// v1 ~ v2 の乱数を返す
// bias: 0.0 - 1.0
random(v1, v2, bias)

namespace WagashiBoxLib

open System
open WagashiBoxLib
open WagashiBoxLib.EasyDrawCommand

module Program =
    [<EntryPoint>]
    let main args =
        let random = new Random()  
        WagashiBox.Show {Title="random line"; Width=500.0; Height=400.0}
            
        wagashi {
            do! background Colors.Black

            do! stroke Colors.GreenYellow
            do! line(0.0, 200.0, 500.0, 200.0)

            do! stroke Colors.AliceBlue
            do! strokeWidth 2.0

            seq{0.0 .. 5.0 .. 500.0}
            |> Seq.fold(fun (lastX, lastY) x ->
                let y = lastY + (random.NextDouble() * 30.0 - 15.0)
                wagashi { do! line(lastX, lastY, x, y) }
                (x, y)
            ) (0.0, 200.0)
            |> ignore
        }
        0

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.