ghpython怎麼實現koch曲線的分形效果

来源:https://www.cnblogs.com/zwhy8/archive/2020/07/24/13373717.html
-Advertisement-
Play Games

前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 作者:彥頁走刀口 今天我們來看看用ghpython怎麼實現koch曲線的分形效果,前兩天分享的雪花分形是利用grasshopper的迴圈插件anemone實現的,然後有個小伙 ...


前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。

作者:彥頁走刀口

今天我們來看看用ghpython怎麼實現koch曲線的分形效果,前兩天分享的雪花分形是利用grasshopper的迴圈插件anemone實現的,然後有個小伙伴說了句十分激勵人心的話,叫普通程式員用迴圈,天才程式員用遞歸,咱們就來看看用遞歸怎麼搞咯。

ghpython怎麼實現koch曲線的分形效果

 

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

經過ghpython一通操作猛如虎之後,就得到了按遞歸次數分組的分形線,最後將分形線進行join,並分別進行縮放和著色。

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

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


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

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

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

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

 

ghpython怎麼實現koch曲線的分形效果

 

ghpython怎麼實現koch曲線的分形效果

 

ghpython怎麼實現koch曲線的分形效果
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 點擊此處進入網盤下載地址 提取碼:btqx 作者介紹: 馬修·羅塞爾(MatthewA.Russell),DigitalReasoningSystems公司的技術副總裁和Zaffra公司的負責人,是熱愛數據挖掘、開源和Web應用技術的電腦科學家。他也是《Dojo:TheDofinitiveGuid ...
  • Python爬蟲開發與項目實戰從基本的爬蟲原理開始講解,通過介紹Pthyon編程語言與HTML基礎知識引領讀者入門,之後根據當前風起雲涌的雲計算、大數據熱潮,重點講述了雲計算的相關內容及其在爬蟲中的應用,進而介紹如何設計自己的爬蟲應用。主要內容分為基礎篇、中級篇、深入篇,基礎篇包括Python編程基 ...
  • 本篇要學習的內容和知識結構概覽 函數的參數及其傳遞方式 1. 函數參數傳遞方式 傳值: 傳變數值: 將實參記憶體中的內容拷貝一份給形參, 兩者是不同的兩塊記憶體 傳地址值: 將實參所對應的記憶體空間的地址值給形參, 形參是一個指針, 指向實參所對應的記憶體空間 傳引用: 形參是對實參的引用, 形參和實參是同 ...
  • K近鄰演算法(KNN,K-NearestNeighbor)是機器學習或數據分析中最基礎、也是最簡單的演算法之一,這個演算法的思路就如同它字面上的意思“K個最近的鄰居”,想要得到某個樣本的某個特征的值(一個樣本通常有多個特征),就需要找到距離它最近的K個樣本,然後根據這些樣本的該特征的近似值作為它的特征值。 ...
  • 百度雲盤:Python入門經典以解決計算問題為導向的Python編程實踐PDF高清完整版免費下載 提取碼:6e8d 內容簡介 《Python入門經典:以解決計算問題為導向的Python編程實踐》是一本系統而科學的Python入門教程,美國密歇根州立大學等多所美國知名高校採用其作為編程語言的入門教材, ...
  • 大量使用的對象,重覆的創建和銷毀,很耗費性能,這個時候就要使用對象池技術。 ...
  • 一、函數嵌套 1.函數的嵌套調用 在調用一個函數的過程中又調用其他函數 將一個大工能拆解成很多小功能 每個函數名都是全局變數,可以在全局有效 2.函數的嵌套定義 在函數內定義其他函數 子函數只能能在函數中被使用,子函數名只在局部有效 最外層函數相當於一個容器,裝了很多子函數 3.函數的嵌套調用和嵌套 ...
  • 百度網盤:Python項目開發實戰(第2版)PDF高清完整版免費下載 提取碼:exep 內容簡介 本書來自真正的開發現場,是BePROUD公司眾多極客在真實項目中的經驗總結和智慧結晶。作者從Python的環境搭建開始講起,介紹了Web應用的開發方法、項目管理及審查、測試與高效部署、伺服器調試等內容, ...
一周排行
    -Advertisement-
    Play Games
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...
  • 目錄前言PostgreSql安裝測試額外Nuget安裝Person.cs模擬運行Navicate連postgresql解決方案Garnet為什麼要選擇Garnet而不是RedisRedis不再開源Windows版的Redis是由微軟維護的Windows Redis版本老舊,後續可能不再更新Garne ...
  • C#TMS系統代碼-聯表報表學習 領導被裁了之後很快就有人上任了,幾乎是無縫銜接,很難讓我不想到這早就決定好了。我的職責沒有任何變化。感受下來這個系統封裝程度很高,我只要會調用方法就行。這個系統交付之後不會有太多問題,更多應該是做小需求,有大的開發任務應該也是第二期的事,嗯?怎麼感覺我變成運維了?而 ...
  • 我在隨筆《EAV模型(實體-屬性-值)的設計和低代碼的處理方案(1)》中介紹了一些基本的EAV模型設計知識和基於Winform場景下低代碼(或者說無代碼)的一些實現思路,在本篇隨筆中,我們來分析一下這種針對通用業務,且只需定義就能構建業務模塊存儲和界面的解決方案,其中的數據查詢處理的操作。 ...
  • 對某個遠程伺服器啟用和設置NTP服務(Windows系統) 打開註冊表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer 將 Enabled 的值設置為 1,這將啟用NTP伺服器功 ...
  • title: Django信號與擴展:深入理解與實踐 date: 2024/5/15 22:40:52 updated: 2024/5/15 22:40:52 categories: 後端開發 tags: Django 信號 松耦合 觀察者 擴展 安全 性能 第一部分:Django信號基礎 Djan ...
  • 使用xadmin2遇到的問題&解決 環境配置: 使用的模塊版本: 關聯的包 Django 3.2.15 mysqlclient 2.2.4 xadmin 2.0.1 django-crispy-forms >= 1.6.0 django-import-export >= 0.5.1 django-r ...
  • 今天我打算整點兒不一樣的內容,通過之前學習的TransformerMap和LazyMap鏈,想搞點不一樣的,所以我關註了另外一條鏈DefaultedMap鏈,主要調用鏈為: 調用鏈詳細描述: ObjectInputStream.readObject() DefaultedMap.readObject ...
  • 後端應用級開發者該如何擁抱 AI GC?就是在這樣的一個大的浪潮下,我們的傳統的應用級開發者。我們該如何選擇職業或者是如何去快速轉型,跟上這樣的一個行業的一個浪潮? 0 AI金字塔模型 越往上它的整個難度就是職業機會也好,或者說是整個的這個運作也好,它的難度會越大,然後越往下機會就會越多,所以這是一 ...
  • @Autowired是Spring框架提供的註解,@Resource是Java EE 5規範提供的註解。 @Autowired預設按照類型自動裝配,而@Resource預設按照名稱自動裝配。 @Autowired支持@Qualifier註解來指定裝配哪一個具有相同類型的bean,而@Resourc... ...