« R、JavaScript、Python、Excel、Squeak Smalltalk, Scilab, Octaveでジバニャンを描く関数が! | トップページ | なぜかわからないが、ゼロ・グラビティの日本語吹き替え版が無償でGoogle Playでダウンロードできた。 »

2014年11月19日 (水)

ジバニャン方程式の図示をExcel VBAでやってみた。

先日、Akiya Mizukoshiさんが発見したジバニャン方程式。

R、JavaScript、Pythonでジバニャンを描く関数が!

これはExcel VBAで数値計算シリーズをやっていた私としてはExcel VBAで描くしかない、ということでやってみた。こちら。

Jibanyan_eq

うわ!ジバニャンだ!!!

角度を変えてみると?

Jibanyan_eq2

なるほどー。

ソースはこちら。わざわざ式を分けているのは、、、後でScratchで描くための布石だったり。

Option Explicit

Private Sub CommandButton1_Click()
    Dim x As Double, y As Double, z As Double
    Dim i As Integer, j As Integer
   
    Application.ScreenUpdating = False
    For i = 1 To 255
        For j = 1 To 255
            x = -150# + 300# * CDbl(i - 1) / 254#
            y = -150# + 300# * CDbl(j - 1) / 254#
            z = Jibanyan_eq(x, y)
            Worksheets("Sheet1").Cells(j + 2, i + 2) = z
        Next j
    Next i
    Application.ScreenUpdating = True
End Sub

Function Jibanyan_eq(x As Double, y As Double) As Double

    Dim f(26) As Double
    Dim Pi As Double
   
    Pi = 3.14159265358979
   
    f(1) = Min(1 - (x / 108) ^ 2 - (y / 94) ^ 2, y)
    f(2) = 1 - ((Abs(x) - 119) / 103) ^ 2 - ((y - 56) / 86) ^ 2
    f(3) = 1 - ((Abs(x) - 15) / 77) ^ 2 - ((y - 119) / 100) ^ 2
    f(4) = 1 - ((Abs(x) - 42) / 66) ^ 2 - (y / 55) ^ 2
    f(5) = Min(Min(55 + y, 51 - Abs(x)), -y)
    f(6) = Max(Max(Max(f(1), Min(f(2), f(3))), f(4)), f(5))
    f(7) = 3 * Abs(y - 100) - 2 * (x - 75)
    f(8) = Min(f(6), f(7))
    f(9) = Min(1 - (x / 106) ^ 2 - (y / 92) ^ 2, y)
    f(10) = 1 - ((Abs(x) - 119) / 101) ^ 2 - ((y - 56) / 84) ^ 2
    f(11) = ((Abs(x) - 99) / 40) ^ 2 + ((y - 54) / 86) ^ 2 - 1
    f(12) = Min(Min(f(10), f(11)), 92 - Abs(x))
    f(13) = 1 - ((Abs(x) - 42) / 64) ^ 2 - (y / 53) ^ 2
    f(14) = Max(Max(f(9), f(12)), f(13))
    f(15) = ((Abs(x) - 52) / 26) ^ 2 + ((y + 28) / 26) ^ 2 - 1
    f(16) = ((Abs(x) - 51) / 13) ^ 2 + (y / 13) ^ 2 - 1
    f(17) = Max(Abs(x) - 51, y)
    f(18) = Min(f(14), Min(Min(f(15), f(16)), f(17)))
    f(19) = Abs(x / 51 + 10 / 51 * Sin(Abs(y / 61.2) ^ (1.2) * Pi * (7 / 2))) ^ (2 / 3) + Abs(y / 61.2) ^ (2 / 3) - 1
    f(20) = Min(f(18), f(19))
    f(21) = 1 - (x / 32) ^ 2 - ((y + 30) / 32) ^ 2
    f(22) = 1 - ((Abs(x) + 5) / 22) ^ 2 - ((y - 18) / 22) ^ 2
    f(23) = Min(f(21), f(22))
    f(24) = 1 - ((Abs(x) - 18) / 20) ^ 2 - ((y + 10) / 20) ^ 2
    f(25) = ((Abs(x) - 20) / 22) ^ 2 + ((y + 7) / 20) ^ 2 - 1
    f(26) = Min(f(24), f(25))

    Jibanyan_eq = f(8) * f(20) * f(23) * f(26) * (1 - ((Abs(x) - 51) / 11) ^ 2 - (y / 11) ^ 2)

End Function

Function Max(x As Double, y As Double) As Double
    If x >= y Then
        Max = x
    Else
        Max = y
    End If
   
End Function

Function Min(x As Double, y As Double) As Double
    If x >= y Then
        Min = y
    Else
        Min = x
    End If
   
End Function


« R、JavaScript、Python、Excel、Squeak Smalltalk, Scilab, Octaveでジバニャンを描く関数が! | トップページ | なぜかわからないが、ゼロ・グラビティの日本語吹き替え版が無償でGoogle Playでダウンロードできた。 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/512682/60675872

この記事へのトラックバック一覧です: ジバニャン方程式の図示をExcel VBAでやってみた。:

« R、JavaScript、Python、Excel、Squeak Smalltalk, Scilab, Octaveでジバニャンを描く関数が! | トップページ | なぜかわからないが、ゼロ・グラビティの日本語吹き替え版が無償でGoogle Playでダウンロードできた。 »

最近の記事

最近のコメント

2017年11月
      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    
フォト
無料ブログはココログ