基於Voronoi二維多晶體的衍生腳本操作2

2021-02-24 無悔程序

小夥伴們晚上好呀。2021年1月已經過完了,今天是2月的第一天,時間如風,略過我英俊的臉龐,無聲無息。過的是真快。

今天呢,還是談一談腳本。雖然我已經很久沒寫子程序了。我對腳本的興趣更大。小夥伴們期待的umeshmotion,我記著的,會寫的。

今天還是談那個二維的泰森多邊形,最近看到有粉絲的留言,大家的留言我基本都能看到,一般都會回復。有位小夥伴問我怎麼讓二維的晶粒生成的更均勻。我回覆說 「對隨機的種子點加以限制」 。因為我寫的例子,種子點都是完全隨機的,所以晶粒也是完全隨機的,所以我想的是,把種子點弄的稍微均勻一點,不就行了嗎。他回復我怎麼限制,應該怎麼做。

到此我就感覺到了大家的一些問題所在,因為有這些問題的小夥伴,我相信是寫腳本沒多久的,甚至是寫代碼沒多久的。所以各位沒有什麼大局觀,大家記住寫腳本,具有很強的目的性,我們就是通過各種手段,去實現我們的目的。不做任何無用功,不寫任何沒用的語句(注釋不算)。對於這些小夥伴,我覺得可能沒有看懂我寫的代碼,我寫的所有腳本,都不是一個整體,是一個個小塊,是可以通過各種排列組合和改寫,去實現你自己的問題的。大家下載之後,可以去嘗試,去理解,去嘗試我在幹什麼。

如果你剛學沒多久,可能對我現在寫的東西沒什麼感覺。但,如果你是一個想學,而苦於沒有好資源的時候,來看我寫的內容,那肯定是大有裨益的。所以,如果你現在不打算學,或者還不知道它的價值,沒關係,收藏一下。相信總有一天,你會用得到。

今天的內容,就是為各位有這些問題的小夥伴準備的,更偏向於新手,我想教教大家一點寫腳本的思維。

今日任務


上面的問題,想實現均勻的晶粒,核心就是讓隨機的形核點均勻。那我們現在的任務就變成了怎麼讓形核點均勻。來看一下,我之前是怎麼隨機的。

python腳本實現abaqus前處理2D多晶粒建模(附完整源碼)-Voronoi多邊形的生成

points = np.array([[random.uniform(0,length*1.2), random.uniform(0,width*1.2)] for i in range(point_number)])

這是我之前的腳本,對於形核點的處理。是個完全隨機的狀態,所以最後的結果就像下圖這種:

因為是完全隨機的,所以每個晶粒並不均勻,這是正常的。現在時代變了,咱們有新的需求了。

那咱們就對形核點進行處理,接下來就是咱們分析大佬的工作了。怎麼個均勻法,這個看個人需求。我這裡做三種,給大家展示一下做法。大家要學思路,我寫的這些話是沒什麼用的,重要是編程思維。謹記。

均勻形核點—方法一


我這第一個均勻的方法是,矩形整列固定核心點。什麼意思呢,意思就是,形核點,差不過是下面這種。

因為這些點點是我草稿紙的底圖,所以看起來不太清楚。但是,相信已經能描述我的意思了。如果,形核點是這種,那麼晶粒應該是什麼樣呢。咱們來寫一下,這些形核點改怎麼生成。

基體的長寬已知,形核點數量已知。假設橫向和縱向的形核點距離一樣。如上解法,可以把形核點的間距解出來。接下來,咱們就可以寫代碼了。

# 方法一points = []x = np.sqrt(length*width/point_number)for i in range(int(length/x)):    for j in range(int(width/x)):        points.append([i*x, j*x])

展示一下結果,夠不夠均勻,兄弟們。覺得均勻的兄弟們,素質三聯走一波,給up漲漲人氣。這個畫圖的是python3寫的。源碼我在文章末尾會分享給你們。咱們先把目標集中在,怎麼生成均勻形核點上。

又有兄弟,可能有疑問了,這個怎麼在abaqus裡生成呢。很簡單,只需要把以前的形核點替換掉即可。展示一下結果,大家自己動手試試,思路和代碼都寫了,移動一下,不是問題吧。

我做一下,證明是可以的。在abaqus裡運行結果如下。大問題沒有,但是有個小問題,看圖左下角。這個我也不知道發生了什麼,如果大家發現有少量缺胳膊少腿的情況,可以在cae裡補畫一下。

均勻形核點—方法二

方法二是什麼呢,其實是我想生成一些正六邊形的晶粒。那麼形核點的位置如何,該怎麼生成。接下來,咱們展示一下,思路。注意啊,思維是最重要的,我寫的代碼,是不重要的,重要的是算法,代碼之後的公式,思維。

把橫向和縱向的間距都求解完之後。就是寫碼的時間了。直接上,這裡注意一點就是,這個不是陣列了,每一層要錯個位,距離是x/2。

points = []x = np.sqrt(2*np.sqrt(3)*length*width/point_number)print(x,int(length/(x/2))+2)for i in range(int(length/(x/2))+2):    for j in range(int(width/(x/np.sqrt(3)))+2):        if i%2 == 0:            points.append([i*x/2, j*x/np.sqrt(3)])        else:            points.append([i*x/2, (j+0.5)*x/np.sqrt(3)])

怎麼樣,夠均勻了吧。還是老規矩,把它轉移到,我們之前的腳本裡去,測試一下成不成功。

這次沒有什麼小瑕疵了,成功運行。有沒有點意思了,只改動了很少的部分。就能有不同的結果。大家再拿到我寫的腳本之後,可以發散性的思考去嘗試,別管它有沒有用,別總是局限在你的項目,課題裡了。幹點自己感興趣的,它不香嗎?

均勻形核點—方法三

由於上面兩個,展示的都是固定形核的辦法,那麼接下來,我要展示一下,隨機形核的辦法。這個要怎麼做呢,很簡單,兄弟們。又想隨機,又想均勻。只需要如何?

只需要讓隨機的區域均勻即可,是不是這個理。啥意思,畫圖解釋一下:

兄弟們,你們懂我意思吧。什麼叫做,隨機的區域均勻。懂了不。我感覺我畫的還算清楚,你們都懂我意思的吧。有不懂的,我單獨指點一下,評論@我一下。

下面咱們就說一下,這一步,應該怎麼做。

確定算法之後,剩下的就是代碼實現了,這一步比較簡單,咱們直接上。

points = []x = np.sqrt(length*width/point_number)for i in range(int(length/x)+2):    for j in range(int(width/x)+2):        px = uniform(i*x, (i+1)*x)        py = uniform(j*x, (j+1)*x)        points.append([px, py])

這樣是不是看起來,就均勻許多了。

還是老規矩,移植到abaqus腳本裡去。看一下效果。

看起來,確實比之前的要均勻許多,晶粒大小上要均勻許多。

最後總結


以上就是我以三個例子去為大家闡述,怎麼個寫法。各位以後在寫腳本的時候,注意下。在你寫腳本之前,你就應該知道怎麼寫了。邏輯,編程的思維,才是最最要緊的。

今天的內容就到這裡,咱們下期再見。兄弟們再見。快過年了,祝願大家天天開心,水平蹭蹭的漲。

源碼


1 python3畫圖的代碼

from scipy.spatial import *from random import *import matplotlib.pyplot as pltimport numpy as np
point_number = 200length = 200width = 100


points = []x = np.sqrt(length*width/point_number)for i in range(int(length/x)+2): for j in range(int(width/x)+2): px = uniform(i*x, (i+1)*x) py = uniform(j*x, (j+1)*x) points.append([px, py])
vor = Voronoi(points)voronoi_plot_2d(vor)plt.show()

2 python腳本,或者去github取,地址你們懂得,後臺回復「腳本」

from abaqus import *from abaqusConstants import *import regionToolsetfrom scipy.spatial import *import numpy as npimport random
point_number = 250length = 150width = 100



points = []x = np.sqrt(length*width/point_number)for i in range(int(length/x)+2): for j in range(int(width/x)+2): px = random.uniform(i*x, (i+1)*x) py = random.uniform(j*x, (j+1)*x) points.append([px, py])points = np.array(points)

vor = Voronoi(points) #create instancevertices = vor.verticesedges = vor.ridge_vertices
myModel = mdb.models["Model-1"]mySketch1 = myModel.ConstrainedSketch(name='sketch1', sheetSize=200.0)mySketch1.rectangle(point1=(0.0, 0.0), point2=(length, width))myPart = myModel.Part(name='Part-voronoi', dimensionality=TWO_D_PLANAR,type=DEFORMABLE_BODY)myPart.BaseShell(sketch=mySketch1)
mySketch2 = myModel.ConstrainedSketch(name='__profile__',sheetSize=200, gridSpacing=10)mySketch2.CircleByCenterPerimeter(center=(-61.49, 2.795), point1=(-44.72, -8.385))
for edge in np.array(edges): if np.all(edge>0): mySketch2.Line(point1=tuple(vertices[edge[0]]), point2=tuple(vertices[edge[1]]))center = points.mean(axis=0)for pointidx, simplex in zip(vor.ridge_points, vor.ridge_vertices): simplex = np.asarray(simplex) if np.any(simplex < 0): i = simplex[simplex >= 0] t = points[pointidx[1]] - points[pointidx[0]] t = t/np.linalg.norm(t) n = np.array([-t[1], t[0]]) midpoint = points[pointidx].mean(axis=0) far_point = vertices[i] + np.sign(np.dot(midpoint - center, n))*n*100 mySketch2.Line(point1=tuple(vertices[i[0]]), point2=tuple(far_point[0]))
myPart.PartitionFaceBySketch(faces=myPart.faces[:], sketch=mySketch2)



相關焦點

  • anemone_均勻化voronoi圖形
    今天咱們繼續來看grasshopper的循環插件anemone的一個官方小案例,之前咱們已經分享過很多期的voronoi相關案例,今天這個是anemone和voronoi相結合的一個小案例,利用anemon的多次遞歸,實現對voronoi圖形均勻化的效果。
  • 星際2地圖編輯器全新腳本接近C語言
    Q:星際2的地圖編輯器還是使用魔獸爭霸3的JASS程式語言嗎,還是一種新版本的語言?   A:星際2的地圖編輯器使用一種全新的腳本語言,我們把它叫做Galaxy——銀河。這是一種很接近於C語言的語言,任何熟悉C語言的人對Galaxy都可以很快上手。
  • 基於Pascal腳本的Web伺服器Moon Http Server已正式上線!
    經過漫長時間的等待,基於Pascal腳本的全功能Web伺服器Moon Http Server(簡稱為MHS)已正式上線!
  • 有沒有劍網3指尖江湖腳本最新的在哪下?金幣修改器輔助勇闖江湖
    劍網3指尖江湖是一款全新的國產手遊,全新國風角色動作類,基於端遊衍生,多種俠客情節, 全新的武學秘籍,酣暢淋漓的輕功,超多遊戲內容,自由玩法,體驗江湖人生。經過查找發現很多人在找劍網3指尖江湖腳本,都想知道劍網3指尖江湖輔助修改器在哪裡下?
  • Rocket-API 2.3.2 發布,基於 spring boot 的 API 敏捷開發框架
    功能新增或修改: 遠程部署重複判斷 添加mongo對象操作函數 mapping路徑匹配修改
  • python3腳本篇1-串口通訊腳本
    前言本文我們來學習Python軟體包pyserial的使用,硬體採用wemos D1開發板,直接燒錄串口章節代碼即可,本文主要編寫PC端Python腳本,完成腳本和外接串口設備通訊的功能。1.pyserial簡介:pyserial模塊是python和串口設備通訊的package,串口是計算機上比較通用的通訊協議,串口設備通過USB插入電腦,python通過pyserial模塊就可以完成和串口設備的通訊,其主要函數說明如下:2
  • 極具潛力的效率啟動器 App,Raycast 腳本功能詳解
    效率啟動器是一類工具的總稱,主要方便通過鍵盤操作快速檢索信息、開啟應用、甚至完成一系列自定義工作流。Mac 上的 Spotlight 搜索實際上可以看作是系統自帶的效率啟動器,默認情況下你可以通過 + 空格鍵快速喚出,並執行文件搜索、天氣查詢、詞典查詢、計算器等一系列方便實用的操作。
  • Blender遊戲引擎的 Python 腳本
    您將學習如何在 Blender 中使用 Python 腳本用腳本調整車輛移動,加速,停車。請記住,汽車只是用作使用 Python 的示例。本教程將教您 Blender 遊戲引擎的 Python 腳本基礎知識,包括通過腳本訪問和更改邏輯信息。即使您對 Python 有所了解,本教程也很容易理解。
  • 暴雪開始封殺按鍵精靈和腳本使用者
    但在當時某些類型的作弊並沒有被羅列其中,比如使用自動腳本進行拍賣行操作或farm。自動腳本的細節我們不多說,那就是通過一組預先記錄的操作來模擬滑鼠和鍵盤指令輸入,以代替玩家完成某些重複勞動。最常見的就是farm第一幕的小地窖。阻止腳本刷怪的措施之一就是暴雪重新開啟了遊戲創建數量限制。
  • 暴雪開始封殺《暗黑3》按鍵精靈和腳本使用者
    但在當時某些類型的作弊並沒有被羅列其中,比如使用自動腳本進行拍賣行操作或farm。自動腳本的細節我們不多說,那就是通過一組預先記錄的操作來模擬滑鼠和鍵盤指令輸入,以代替玩家完成某些重複勞動。最常見的就是farm第一幕的小地窖。阻止腳本刷怪的措施之一就是暴雪重新開啟了遊戲創建數量限制。
  • 腳本輔助對網路遊戲的影響
    而頁遊也是更早的植入了,自動尋路,自動打怪,自動主線這些看電視劇版的遊戲操作。 過去我們是玩遊戲。一群人組隊下FB,一邊打怪一邊聊天,都是手動的,玩家都要在旁邊操控,有討論遊戲玩法的,有討論身上裝備獲取方式的,有談情說愛的。玩家在遊戲中的每個腳印都是自己踩下的,雖然很浪費時間,但是卻有無窮的樂趣。
  • 王者榮耀是怎樣煉成的(三)unity組件與腳本
    C#腳本文件的後綴是「.cs」。雙擊腳本文件,可以調用代碼編輯器進行編輯。5.原始腳本代碼組成在上一步我們新建了一個腳本,這次打開它看看究竟是什麼東東。還能看到,這個腳本using了UnityEngine的引擎。然後unity還幫我們寫了兩個方法Start()和Update()。Start():當遊戲運行起來,這個方法就會馬上執行且只執行一次。由此看來,這個方法非常適合做初始化的工作。事實上也是這樣的,我們常常在這個方法中做一些GetComponent()的操作。Update():循環調用,每一幀就調用一次。
  • 手把手教你用「按鍵精靈」運行腳本教程大全
    按鍵精靈是一個可以模擬電腦操作的軟體,您在電腦上的一切動作都可以讓按鍵精靈模擬執行,完全解放您的雙手。按鍵精靈可以幫你操作電腦,不需要任何編程知識就可以作出功能強大的腳本。首先,我們打開「按鍵精靈」。打開軟體後點擊工具欄上「新建」項;之後進入「腳本編譯器」界面。
  • 基於WebGL的3D可視化告警系統關鍵技術解析 ThingJS
    為了解決開發效率低的問題,出現了基於 JavaScript語言的第三方庫-three.js,這是開源的技術,受到了廣大前端轉3D開發師的追捧。three.js是一個跨瀏覽器的腳本,它封裝了底層的圖形接口,對 WebGL有很好的支持,不需要掌握複雜的圖形學知識就能實現三維場景的渲染。
  • 吉林大學喬振安教授AM基於化學反應定製聚合物膠體球衍生多孔碳球
    文章背景 聚合物膠體球衍生的多孔碳球具有規則均一的幾何形狀以及可控的組分與結構在能量轉化與存儲、氣體吸附與分離、催化以及光熱診療等方面都發揮著重要作用。合適的化學反應和匹配的合成策略對於多孔碳球前驅體——聚合物膠體球的合成至關重要。
  • 遊戲蜂窩輔助全新功能 免ROOT腳本錄製做你專屬定製
    生活中、工作中或者學習中,往往會遇到很多重複操作的情況,大量的數據需要從一個表格搬運到另外一個表格;準點搶茅臺需要一直按著搶購按鈕;手遊做日常打怪需要一直無腦點點點……一直重複的操作讓人覺得疲憊,想要「解放雙手」的願望可以交給新版《遊戲蜂窩》
  • 暴雪開始封殺《暗黑3》按鍵精靈和腳本使用者_遊俠網 Ali213.net
    但在當時某些類型的作弊並沒有被羅列其中,比如使用自動腳本進行拍賣行操作或farm。自動腳本的細節我們不多說,那就是通過一組預先記錄的操作來模擬滑鼠和鍵盤指令輸入,以代替玩家完成某些重複勞動。最常見的就是farm第一幕的小地窖。阻止腳本刷怪的措施之一就是暴雪重新開啟了遊戲創建數量限制。
  • 基於軟骨衍生細胞外雜化納米纖維支架的製備及在軟骨組織中的應用
    :基於軟骨衍生的細胞外基質cECM/PCL雜化納米纖維支架的製備及其在軟骨組織中的應用DOI:10.1016/j.matdes.2020.108773衍生自脫細胞組織和器官的細胞外基質(ECM)已在各種臨床前和臨床應用中用作生物支架。但是,缺乏機械性能和形狀可控性是一個缺點。相比之下,合成聚合物可以很容易地設計出具有良好機械性能的支架,但它們的生物功能有限。
  • 自製王者榮耀一鍵換裝宏 遊戲蜂窩自由錄製腳本
    最近流傳一個職業玩家和普通玩家的各類差異,其中最讓人瞠目結舌的一個操作莫過於一秒換裝,或者又叫做秒換三裝。團戰一旦開打,按秒計算的戰鬥時間,居然還能來回切換復活甲、血手、名刀或者金身……眾所周知,《王者榮耀》到了遊戲局內的後期拼的就是操作和技巧,裝備和資源已經不再重要,大部分玩家已經是6個裝備滿上,並且來回團戰多輪,有了足夠的金幣隨時切換不同的裝備,操作的勝負成為了決定比賽勝負的關鍵。
  • 新版PyTorch 1.2 已發布:功能更多、兼容更全、操作更快!
    此外,用戶現在可以設置個性化的標記來導出自定義操作,並在導出期間指定輸入的動態大小。所有主要改進的內容如下:支持多種 Opset,包括在 Opset 10 中丟失導出、切片、翻轉和插值的功能。ScriptModule 的改進,包括了支持多輸出、張量工廠、元組作為輸入和輸出。支持了十幾個其它的 PyTorch 操作,包括導出自定義操作的能力。許多重大修復和測試基礎改進。