usingPlotsconstradian=π*60/180# 正三角形の角度をラジアン化constp0=(0.0,0.0)constp1=(100.0,0.0)constnum_recursion=5# 繰り返し回数constpos_x=1constpos_y=2points=[p0]# 各点の座標(x,y)を入れる配列(最終的にこれをプロット)# Function definitionfunctionkoch(a,b,num_recursion)ifnum_recursion==0returnendq0=(a[pos_x]+(b[pos_x]-a[pos_x])/3,a[pos_y]+(b[pos_y]-a[pos_y])/3)q2=(a[pos_x]+(b[pos_x]-a[pos_x])*2/3,a[pos_y]+(b[pos_y]-a[pos_y])*2/3)q1=(q0[pos_x]+(q2[pos_x]-q0[pos_x])*cos(radian)-(q2[pos_y]-q0[pos_y])*sin(radian),q0[pos_y]+(q2[pos_x]-q0[pos_x])*sin(radian)+(q2[pos_y]-q0[pos_y])*cos(radian))koch(a,q0,num_recursion-1)push!(points,q0)koch(q0,q1,num_recursion-1)push!(points,q1)koch(q1,q2,num_recursion-1)push!(points,q2)koch(q2,b,num_recursion-1)end# Main partkoch(p0,p1,num_recursion)push!(points,p1)x=[points[i][pos_x]foriin1:length(points)]y=[points[i][pos_y]foriin1:length(points)]plot(x,y,linewidth=0.5)savefig("koch_curve.png")
usingPlots# mandelbortを計算する関数。返り値は計算回数functionmandelbrot(x,y;max_iterations)z=zero(Complex(x,y))forkin1:max_iterationsz=z^2+Complex(x,y)abs2(z)>4&&returnkendreturnmax_iterationsendfunctionplot_mandelbrot(pos,s;# additional infomax_iterations=1000,color=reverse(cgrad(:jet1)),figsize=(300,300),kwargs...)# 点(x, y)で、mandelbrotをmax_iterations回だけ計算するx=range(pos[1]-s,pos[1]+s,length=301)tate_x=transpose(x)y=range(pos[2]-s,pos[2]+s,length=301)k=mandelbrot.(tate_x,y;max_iterations=max_iterations)# 計算結果を描画plot(;kwargs...)# extrema(itr): Compute both the minimum and maximum elementplot!(xlim=extrema(x),ylim=extrema(y),xrotation=90)heatmap!(x,y,log.(k);colorbar=false,size=figsize,color=color,tickfontsize=6)endt=range(0,1,length=200)ss=@.exp(-log(1/0.001)*t)starting_point=[-1.2562,0.0685]# starting_point = (0.75, 0.0)anim=@animateforsin[fill(ss[1],20);ss;fill(ss[end],20)]plot_mandelbrot(starting_point,s;xtick=false,ytick=false)endgif(anim,"mandelbrot.gif",fps=20)