溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ghpython中koch曲線如何實現(xiàn)

發(fā)布時間:2021-06-26 14:07:09 來源:億速云 閱讀:165 作者:Leah 欄目:大數(shù)據(jù)

ghpython中koch曲線如何實現(xiàn),針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

首先以基礎(chǔ)多邊形為初始線,將其炸開,因為后邊要分別對每一根線進行分形操作。

經(jīng)過ghpython一通操作猛如虎之后,就得到了按遞歸次數(shù)分組的分形線,最后將分形線進行join,并分別進行縮放和著色。

#雪花分形
import rhinoscriptsyntax as rs
from Grasshopper import DataTree
from Grasshopper.Kernel.Data import GH_Path
import ghpythonlib.treehelpers as gt

#函數(shù)1,定義一個對直線等分,移動等分點,連接成折線的函數(shù)
def fractal(line):
    #對直線三等分,得到四個點
    pts=rs.DivideCurve(line,3,False,True)
    #將第三個點以第二個點為中心旋轉(zhuǎn)-60°
    pt_rotate=rs.RotateObject(pts[2],pts[1],-60,None,True)
    #將旋轉(zhuǎn)后的點插入到等分點列表中索引值為2的位置
    pts.insert(2,pt_rotate)
    #根據(jù)點生成多段線,然后將多段線炸開
    pl=rs.AddPolyline(pts)
    pl_ex=rs.ExplodeCurves(pl,True)
    #返回炸開后的多段線
    return pl_ex


num=0   #設(shè)定初始計數(shù)器
lst_data=DataTree[object]()   #建立一個空的樹形數(shù)據(jù)列表
#函數(shù)2,調(diào)用函數(shù)1對直線分形,并將分形數(shù)據(jù)添加到樹形數(shù)據(jù)列表,注意路徑號的選擇
#這樣就可以將同一次調(diào)用函數(shù)2的所有分形線放置在了同一路徑下
def mul_fractal(lines):
    #全局變量,用來設(shè)置路徑號
    global num
    num+=1
    lst=[]
    #對調(diào)用函數(shù)的所有直線進行遍歷分形,并追加到列表中
    for i in lines:
        lst.extend(fractal(i))
    #將列表數(shù)據(jù)放置到樹形數(shù)據(jù)中
    lst_data.AddRange(lst,GH_Path(num))
    return lst

#函數(shù)3,主函數(shù),用來設(shè)置分形次數(shù)
def main(lines,count):
    #如果分形次數(shù)為0 ,則直接返回原直線
    if count==0:
        return lines
    #如果分形次數(shù)為1,則作為遞歸出口,返回一次細分后的分形線
    if count==1:
        return mul_fractal(lines)
    #如果分形次數(shù)大于1,則調(diào)用主函數(shù)自身,分形次數(shù)減1,直至分形次數(shù)為1,達到遞歸出口
    #然后依次返回遞歸分形數(shù)據(jù)
    else:
        return mul_fractal(main(lines,count-1))

#調(diào)用主函數(shù),得到分形線,將初始線添加到分形線樹形數(shù)據(jù)的第一個分支
fractal_lines=main(lines,count)
lst_data.AddRange(lines,GH_Path(0))

#根據(jù)樹形數(shù)據(jù)的分支數(shù)進行遍歷
#每一個分支的數(shù)據(jù)向上進行移動
for i in range(lst_data.BranchCount):
    rs.MoveObjects(lst_data.Branch(i),(0,0,i*height))

關(guān)于ghpython中koch曲線如何實現(xiàn)問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI