CAD的prompt 告一段落了特纤,交個作業(yè):畫出柯西雪花曲線:
Koch曲線的構(gòu)造方法:
- 三等分一條線段铺韧;
- 用一個等邊三角形替代第一步劃分三等分的中間部分赤炒;
- 在每一條直線上吊骤,重復第二步缎岗。
Koch曲線是以上步驟地無限重復的極限結(jié)果(下圖)。
線條的表示復數(shù)方法:
用復數(shù)表示二維線條非常方便白粉,轉(zhuǎn)角動作用歐拉公式復數(shù)的乘法性質(zhì):
轉(zhuǎn)角n度 : Z * exp(cos(n) + isin(n))
放大n倍 : nZ
CAD prompt 思路:
- 列取出所有的平面復線條传泊;
- 用Z的實部和虛部表示(X,Y),連接成線條鸭巴;
PYTHON 實現(xiàn) 復數(shù)Z 列表的方法:
- 動作細胞函數(shù):kochcell(a,b)
輸入兩個復數(shù)眷细,輸出五個復數(shù),函數(shù)內(nèi)實現(xiàn)移動和轉(zhuǎn)角鹃祖,五個復數(shù)是以 tuple 格式輸出的 - 組合細胞函數(shù) kochcombine(cells)溪椎;
輸入一個復數(shù)列表,兩兩用動作細胞函數(shù) kochcell(a,b) 組合恬口,生成一個組合tuple校读,每個tuple都是一個動作細胞函數(shù)的元祖的輸出;
這個函數(shù)的第二部分是對這個二維元祖的降維操作祖能,否則無法遞歸歉秫,這里用了numpy的shape屬性和reshape方法; - 迭代函數(shù) kochco(n)养铸;
通過迭代 return kochcombine(kochco(n-1))雁芙,方法轧膘,用 組合細胞函數(shù) 對 迭代函數(shù) kochco的上一輩操作一次,返回當函數(shù)的結(jié)果兔甘,結(jié)果為 一串復數(shù)列表谎碍; - 遍歷復數(shù)列表,打印出實部和虛部洞焙;
代碼如下:
<code><pre>
import numpy as np
import math
Z1 = 1+2j
Z2 = 1000+150j
def kochcell(a,b):
cell1 = a
cell2 = cell1 + (b-a)/3
cell3 = cell2 + (b-a)/3 (math.cos(math.pi/3)+math.sin(math.pi/3)1j)
cell4 = cell3 + (b-a)/3 (math.cos(-math.pi/3)+math.sin(-math.pi/3)1j)
cell5 = b
return cell1,cell2,cell3,cell4,cell5
def kochcombine(cells):
celllists = []
item = []
after = []
for index, item in enumerate(cells):
if index <= len(cells)-2:
item = list(kochcell(cells[index],cells[index+1]))
after.append(item)
before = np.array(after).reshape(1,np.array(after).shape[0]*np.array(after).shape[1])[0]
return before
def kochco(n):
if n==1:
return kochcombine((Z1,Z2))
else :
return kochcombine(kochco(n-1))
f = open(r'C:\Users\Administrator\Desktop\1.txt','w')
s = 'l 0,0\n'
for i in kochco(6):
s += '%s,%s\n'%(i.real,i.imag)
s += ' '
print(s)
f.write(s)
f.close()
</pre></code>
CAD prompt 結(jié)果:
程序會在桌面生成一個1.txt蟆淀,復制所有內(nèi)容到CAD prompt中,生成如下圖像: