新四季網

BIMBase之python建模寶典莫比烏斯環(BIMBase之python建模寶典莫比烏斯環)

2023-10-07 15:15:46 1

BIMBase自從2021年發布以來獲得了眾多關心國產BIM和業務數位化轉型的圈內老法師的關注,除了是國內首款完全自主智慧財產權的的BIMBase系統,實現建築信息模型(BIM)關鍵核心技術自主研發安全可控。

同時開創了BIM X python的技術跨界混搭風,得以讓建模可以通過快速編程實現。

So!

BIMBase團隊為了在功能和場景上

幫助大家了解BIMBase

學習建模小技巧

開設了技術專欄

【BIMBase之python建模寶典】

今日分享第十四彈

莫比烏斯帶(德語:Möbiusband),又譯梅比斯環、莫比烏斯環或麥比烏斯帶,是一種只有一個面(表面)和一條邊界的曲面,也是一種重要的拓撲學結構。它是由德國數學家、天文學家莫比烏斯和約翰·李斯丁在1858年獨立發現的。

這個結構可以用一個紙帶旋轉半圈再把兩端粘上之後輕而易舉地製作出來。事實上有兩種不同的莫比烏斯帶鏡像,他們相互對稱。如果把紙帶順時針旋轉再粘貼,就會形成一個右手性的莫比烏斯帶,反之亦類似。

今天就和大家分享一下如何創建莫比烏斯環模型。

圖文教程

BIMBase圓端形橋墩

① 定義參數化模型並定義各個參數及其默認值

from pyp3d import *

class 莫比烏斯環(Component):

def __init__(self):

Component.__init__(self)

self['莫比烏斯環'] = Attr(None, show = True)

self['截面離散數'] = Attr(360, obvious = True, group = '莫比烏斯環')

self['環半徑'] = Attr(500.0, obvious = True, group = '莫比烏斯環')

self['旋轉次數(一次180°)'] = Attr(3, obvious = True, group = '莫比烏斯環')

self.replace

② 設置變量並調用參數(簡化書寫)

@export

def replace(self):

n = self['截面離散數']

R = self['環半徑']

turns = self['旋轉次數(一次180°)']

③ 繪製模型

方法一:利用線性排布與放樣創建模型

1. 建立截面並初始化列表

利用Section函數傳入Vec2(作為點)以創建正方形截面,並將該截面繞x軸旋轉90°得到初始截面記sec1,並將secs定義為含n個sec1的列表。對應代碼如下:

sec1 = rotx(pi/2) * Section(Vec2(50, 50), Vec2(-50, 50), Vec2(-50, -50), Vec2(50, -50))

secs = [sec1]*n

2. 線性排布、放樣、平滑處理

利用for循環與zip、range、linspace、append等函數實現對截面的線性排布。該過程共排布n個截面,該n個截面繞z軸依序共逆時針旋轉,同時繞y軸依序共順時針旋轉的turns倍,由於linespace輸出包含首尾點位,因此上述旋轉角度均需乘以(n-1)/n倍。每個點位的截面由初始截面繞y、z軸旋轉相應角度然後沿x、y軸分別平移至相應位置獲得。當旋轉次數為偶數時,將初始截面追加入secs列表;當旋轉次數為奇數時,則將初始截面繞y軸順時針旋轉半周並沿x軸正方向平移R個單位,然後追加入secs列表。最後,對secs放樣並平滑處理。

對應代碼如下:

for i,thetaZ,thetaY in zip(range(n), linspace(0,2*pi/n*(n-1), n), linspace(0,turns*pi/n*(n-1), n)):

secs[i] = trans(R*cos(thetaZ), R*sin(thetaZ), 0)*rotz(thetaZ)*roty(-thetaY)*secs[i]

if turns%2==0:

secs.append(secs[0])

else:

secs.append(trans(R, 0, 0)*roty(-pi)*sec1)

mobiusBand = Loft(*secs)

mobiusBand.smooth=True

方法二:利用sweep_mubiu_arc快速創建

在方法一中,莫比烏斯環的創建涉及到多種函數與語句的嵌套,費時費力,對Python基礎薄弱的用戶並不友好。為解決這一問題,新版本中推出了sweep_mubiu_arc函數,可以幫助用戶快速創建莫比烏斯環,節省了建模思路上耗費的時間,一步到位!

在方法二中,只需利用Section函數傳入Vec2(作為點)創建正方形截面,然後再使用sweep_mubiu_arc函數即可快速創建莫比烏斯環。sweep_mubiu_arc函數需要傳入初始截面、環半徑以及0.5倍旋轉次數。對應代碼如下:

sec2 = Section(Vec2(50, 50), Vec2(-50, 50), Vec2(-50, -50), Vec2(50, -50))

mobiusBand = sweep_mubiu_arc(sec2, R, turns/2)

mobiusBand.smooth=True

方法比較

由模型輸出結果可知,在輸入參數一致的情況下,兩種方法得到的模型效果基本無異,而方法二則為用戶省去了大量精力與時間,並避免出錯成本。

④ 輸出模型

定義變量並輸出繪製模型。該過程代碼如下:

self['莫比烏斯環'] = mobiusBand

if __name__ == "__main__":

Final_Geometry = 莫比烏斯環

place(Final_Geometry)

模型輸出效果:

模型參數調整效果:

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了