每星期創意性機構設計課程筆記整理
- 機構分析
- 數目合成
- 類型合成
機構分析
找到了一個中國專利網站的平面連桿機構,進行一般化:
連桿數為 9,有 7 個旋轉接頭與 4 個滑動接頭(這裡顏教授沒有使用 RP 接頭)。
老師說這樣的數目很多組合,值得嘗試。
今天想了一下拓樸構造,這方面的「同構」其實會移除所有接頭屬性,只看連桿連接構造。
數目合成
上次那個解題程式雖然比較有效率但是寫太死,因此不可能用在任意種類的機構。
於是今天寫了個萬用的。
from itertools import product class NumberSynthesis: def __init__(self, NL, NJ): self.NL = NL self.NJ = NJ @property def Mmax(self): if self.NL <= self.NJ and self.NJ <= (2*self.NL-3): return self.NJ - self.NL + 2 elif (2*self.NL-3) <= self.NJ and self.NJ <= (self.NL*(self.NL-1)/2): return self.NL - 1 else: raise ValueError("incorrect number.") @property def NLm(self): result = [] correction = lambda l: sum((i+2)*l[i] for i in range(len(l))) == 2*self.NJ for symbols in product(range(self.NL+1), repeat=self.Mmax-2): NLMmax = self.NL - sum(symbols) answer = symbols+(NLMmax,) if correction(answer) and NLMmax>=0: result.append(answer) return tuple(result) if __name__=='__main__': a = NumberSynthesis(9, 11) print(a.NLm)
找到的 Mmax 為 4,答案為:
((5, 4, 0), (6, 2, 1), (7, 0, 2))
使用的是 Python 內建迭代工具 itertools 模組的 product 函式,輸入「種類數」與「組合長度」,可以直接輸出一個 generator,用 tuple 回傳所有組合的結果。
三個未知數可以先取前兩個未知數的組合,透過第一式找到第三個未知數的解。
$$N_{L}(桿件數)=\sum_{m=2}^{m_{max}}N_{L_{m}}$$
然後透過第二式與「第三個未知數為正數」驗正是否符合。
$$2N_{J}(接頭數)=\sum_{m=2}^{m_{max}}mN_{L_{m}}$$
輸出的結果即為符合連桿數與接頭數的條件下,雙接頭桿件、三接頭桿件、四接頭桿件分別的數量。
再來是類型合成的部份。
類型合成
稍微為找到的機構畫了下樹狀圖:
程式排列順序為左至右,接頭用完就換兄弟姊妹項;當此輩分用完時,才由最左的連桿繼續接。此種拓樸法理論上不會有先後問題。
若不看數目合成的結果,此種數目其實只會辨認 5 個雙接頭與 4 個三接頭連桿。
必須達成:
- 取光這 9 個連桿。
- 接頭完全都有連接(遇到死點要自動作廢)。
- 轉換成表示法判斷同構。
拓樸可以使用主副 class 附加屬性達成,也會先寫一些小模型才會加入 Pyslvs。
每個數目合成的結果都可以做類型合成,也是這裡最複雜,必須排除無用或重複的機構。
然後圖譜目前找不到規律性,不知有何方法可以「畫」出來,不然現階段只能展示很難閱讀的樹狀結構。
最後特殊化的部份就可能要人工手動或 AI 介入了,因為必須賦予連桿功能,例如迴歸輪系不可以在三角形迴路上。
上次寫的拓樸法先拿掉,準備重寫。數目合成小模型加入 Pyslvs 的成效:
Comments
comments powered by Disqus