ジバニャン方程式の図示を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でダウンロードできた。 »
「パソコン・インターネット」カテゴリの記事
- 家で使うPCをゲーミングノートPC、ASUS TUF Gaming A16に買い替えた。CPUはAMD Ryzen 9 8940HX、メモリ32GB、GPUはNVIDIA GeForce RTX 5060 Laptop GPU、SSD 1TB。ゲームをしたいわけでなくてNVIDIAの最新GPUで機械学習・数値計算やろうかと。(2025.11.13)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/11/3-2025/11/9(2025.11.09)
- RF Weekly Digest (Google AI Studio BuildによるAIで高周波・RF情報の週刊まとめアプリ) 2025/10/27-2025/11/3(2025.11.04)
- Google AI StudioのBuild(アプリを作る機能)で高周波・RFニュースを1週間分まとめるアプリを作った(最終版) 私がいつも調査しているサイト67個を全部入れて調べてもらうようにした。これでとりあえず完成かな。QorvoとSkyworksの合併も拾ってくれた。(2025.10.30)
« R、JavaScript、Python、Excel、Squeak Smalltalk, Scilab, Octaveでジバニャンを描く関数が! | トップページ | なぜかわからないが、ゼロ・グラビティの日本語吹き替え版が無償でGoogle Playでダウンロードできた。 »




コメント