您好,登錄后才能下訂單哦!
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)知識。
免責(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)容。