日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集

發(fā)布時(shí)間:2025/3/20 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

1. Koch曲線

瑞典數(shù)學(xué)家Helge von Koch,在1904年發(fā)表的“從初等幾何構(gòu)造的一條沒有切線的連續(xù)曲線”的論文中提出Korch曲線。它的描述如下:指定一條線段的長(zhǎng)度\(l\)(可以理解為第0次迭代)

將這條線段三等分,并以中間的線段為底邊構(gòu)造一個(gè)等邊三角形,然后去掉底邊

對(duì)2中生成的曲線的每一條邊重復(fù)2的操作(每操作一次稱為一次迭代)

最終得到的集合圖形長(zhǎng)度為:$$L=l*(\frac{4}{3})^{N}$$,其中的N指的是迭代次數(shù)。

1.2 繪制方法:如果N=0,直接畫出L長(zhǎng)的直線即可

如果N=1(第一次迭代),畫出長(zhǎng)度為L(zhǎng)/3的線段;畫筆向左轉(zhuǎn)60度再畫長(zhǎng)度為L(zhǎng)/3長(zhǎng)的線段;畫筆向右轉(zhuǎn)120度畫長(zhǎng)度為L(zhǎng)/3長(zhǎng)的線段;畫筆再向左轉(zhuǎn)60度畫出長(zhǎng)度為L(zhǎng)/3的線段

如果n>1,第n次迭代相當(dāng)于:n-1次迭代;畫筆左轉(zhuǎn)60度;n-1次迭代;畫筆右轉(zhuǎn)120度;n-1次迭代;畫筆左轉(zhuǎn)60度;n-1次迭代。

1.3 Python代碼實(shí)現(xiàn)# -*- coding: utf-8 -*-

import turtle

Division = 3.0

DirectionAangle = [('left',60),('right',120),('left',60)]

def call(name):

if name == 'left':

return turtle.left

else:

return turtle.right

def koch(n, length):

if n==0:

turtle.forward(length)

else:

for DA in DirectionAangle:

koch(n-1,length/Division)

call(DA[0])(DA[1])

koch(n-1,length/Division)

koch(n=2, length=100)

turtle.done()

1.4 繪制的圖形

下面分別是n=3, length=300和n=4, length=400生成的Koch曲線

2. Julia集

2.1 繪制方法

在上一篇博文中提到過(guò),點(diǎn)擊前往設(shè)定初值 p,q, 最大的迭代次數(shù) N, 圖形的大小 a,b, 及使用的顏色數(shù) K.這里需要注意的是c的模總是小于2。可以證明當(dāng)c的模大于2時(shí),進(jìn)行迭代必將發(fā)散到無(wú)窮。

設(shè)定區(qū)域的界值 \( M\ge max(2,\sqrt{p^2+q^2}) \)

將區(qū)域\(R=[-M,M]\times[-M,M]\)分成\(a\times b\)的網(wǎng)格,分別以每個(gè)網(wǎng)格點(diǎn)為初值(\(x_0,y_0\))。利用上面替換之后的公式做迭代。如果對(duì)\(n \le N\)所有的都有\(zhòng)({x_n}^2+{y_n}^2\le M^2 \),則將象素\((i, j)\)置為這一種顏色。如果從某一步 n 開始\({x_n}^2+{y_n}^2\ge M^2 \),則將象素 \((i, j)\)置為不同顏色。

2.2 Python代碼實(shí)現(xiàn)# -*- coding: utf-8 -*-

import matplotlib.pyplot as plot

import numpy as np

p=0.45 #初始值c的實(shí)部

q=-0.1428 #初始值c的虛部

N=800 #最大迭代次數(shù)

M=100 #迭代區(qū)域的界值

a=3.0 #繪制圖的橫軸大小

b=3.0 #繪制圖的縱軸大小

step=0.005 #繪制點(diǎn)的步長(zhǎng)

def iterate(z,N,M):

z=z*z+c

for i in xrange(N):

if abs(z)>M:

return i

z=z*z+c

return N

c=p+q*1j

i=np.arange(-a/2.0,a/2.0,step)

j=np.arange(b/2.0,-b/2.0,-step)

I,J=np.meshgrid(i, j)

ufunc=np.frompyfunc(iterate,3,1)

Z=ufunc(I+1j*J,N,M).astype(np.float)

plot.imshow(Z,extent=(-a/2.0,a/2.0,-b/2,b/2.0))

cb = plot.colorbar(orientation='vertical',shrink=1)

cb.set_label('iteration counts')

plot.show()

2.3 繪制的圖形

參數(shù):p=0.285 q=0.01 N=200 M=100 a=2.0 b=2.0 step=0.005 (左圖)

參數(shù):p=0.45 q=-0.1428 N=200 M=100 a=2.0 b=2.0 step=0.005 (右圖)

還有其他的初始c值可以繪制出十分漂亮的圖案,例如:

c = -0.70176+-0.3842j c = -0.835+-0.2321j c = -0.8+0.156j c = 0.285

3. Mandelbrot集

數(shù)學(xué)定義: $$f_c(z) = z^2+c$$

Mandelbrot集是\(f_c(z)\)在z=0,關(guān)于復(fù)數(shù)c=x+yi的函數(shù)迭代不發(fā)散序列集合。

繪制Mandelbrot集最簡(jiǎn)單的方法是使用逃逸時(shí)間進(jìn)行繪制。逃逸時(shí)間指的是,在指定范圍M進(jìn)行有限次數(shù)N迭代,而不超出M區(qū)域的次數(shù)。使用不同的顏色繪制不同的迭代次數(shù)。設(shè)置迭代的最多次數(shù),N

設(shè)置初始化\(z_0\)的值,

設(shè)置逃逸半徑R的值,通常為2

3.1 繪制方法

3.2 Python實(shí)現(xiàn)# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plot

x0=0 #初始值z(mì)0的x0

y0=0 #初始值z(mì)0的y0

zoom=1.0 #放大倍率

N=100 #最大迭代次數(shù)

R=2 #迭代半徑

a=4.0 #繪制圖的橫軸大小

b=3.0 #繪制圖的縱軸大小

step=0.005 #繪制點(diǎn)的步長(zhǎng)

def iterate(c,N,R):

z=c

for i in xrange(N):

if abs(z)>R:

return i

z = z*z+c

return N

x=np.arange(-a/(2.0*zoom)+x0,a/(2.0*zoom)+x0,step)

y=np.arange(b/(2.0*zoom)+y0,-b/(2.0*zoom)+y0,-step)

cx,cy=np.meshgrid(x, y)

c = cx + cy*1j

ufunc=np.frompyfunc(iterate,3,1)

Z=ufunc(c,N,R).astype(np.float)

plot.imshow(Z,extent=(-a/2.0,a/2.0,-b/2,b/2.0))

cb = plot.colorbar(orientation='vertical',shrink=1)

cb.set_label('iteration counts')

plot.show()

3.3 繪制的圖形

圖中是使用參數(shù):x0=0 y0=0 zoom=1.0 N=100 R=2 a=4.0 b=3.0 step=0.005。生成的圖像。不同的是,它們依次使用的是二次、三次冪的迭代。

最后,還可以使用ImageMagick工具,將生成的圖像制作成一個(gè)動(dòng)態(tài)GIF。convert *.png out.gif

總結(jié)

以上是生活随笔為你收集整理的python分形几何_使用 Python 绘制分形: Koch 曲线、Julia 集、Mandelbrot 集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。