ジバニャン方程式の図示をExcel VBAでやってみた。
先日、Akiya Mizukoshiさんが発見したジバニャン方程式。
R、JavaScript、Pythonでジバニャンを描く関数が!
これはExcel VBAで数値計算シリーズをやっていた私としてはExcel VBAで描くしかない、ということでやってみた。こちら。
うわ!ジバニャンだ!!!
角度を変えてみると?
ソースはこちら。わざわざ式を分けているのは、、、後で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でダウンロードできた。 »
「パソコン・インターネット」カテゴリの記事
- Interface2025年8月号Pythonで体験!はじめての暗号を買った。上杉暗号からRSA、AES、DHなど、特に楕円曲線暗号についてはコードも実際に動かすところまで詳しくかかれていた。耐量子暗号や聞いたことなかったY-00暗号や関数型暗号も記載。(2025.07.10)
- Gemini CLIが使えるようになっていたので早速VSCodeのターミナルから使って、JavaScriptで連立一次方程式を計算するコードを書いてもらった。普通にガウスの消去法で計算するhtmlを作ってくれた。(2025.06.27)
- Google ColabのJulia言語で1次元のGray-Scottモデル(∂u/∂t=u²v-(F+k)u+Du∂²u/∂x²,∂v/∂t=-u²v+F(1-v)+Dv∂²v/∂x²)を計算してパルスが次々分裂する様子を見る。空間6次の差分、時間8次のルンゲクッタ法で計算。(2025.07.08)
« R、JavaScript、Python、Excel、Squeak Smalltalk, Scilab, Octaveでジバニャンを描く関数が! | トップページ | なぜかわからないが、ゼロ・グラビティの日本語吹き替え版が無償でGoogle Playでダウンロードできた。 »
コメント