任務描述:對一個三維的帶網格的模型,生成一個二維平面的圖像描述,其中每個空格內部顯示這個座標下在z方向具有多少網格,類似於三維模型的深度圖
方法:有兩個方法
1.從網格文件OBJ內部讀取點座標,統計(x,y)的個數
2.從Inp文件內部讀取點座標,統計(x,y)的個數
在實驗過程中,發現方法1 的obj文件內部的點的信息比較雜,可能包含除了網格以外的其他的點的信息,所以放棄了這種方法。這裏主要介紹方法2
inp文件讀取
writenode = []
#writenode 點集
write_flag = False
input = open("new_1.inp","r")
#讀取inp文件
astring = input.readlines()
#這裏這種讀入方式的好處是astring是list類型,其餘方式可能是str類型
for i,line in enumerate(astring):
if line =="*Node\n":
#找到inp文件內部開始記錄點信息的地方
write_flag = True
#寫入文件標誌位開始
continue
#跳出當前循環,執行下一次循環,這樣*Node就不會寫入文件內部
print(i)
if line =="*Element, type=C3D8R\n":
break
#點描述信息結束後是描述單元信息,正好這裏截止,挑出for循環
if write_flag ==True:
writenode.append(line.replace(",",""))
點集寫出
接下來可以將我們的點信息輸出另一個文件:
f=open('point.txt','w')
for i in writenode:
f.write(i)
f.close()
重新讀入生成numpy array
a = np.loadtxt('zz.txt')
a = np.around(a)
#四捨五入,可能出現一些不準的點,防止出問題
刪除無關信息
c= np.delete(a,0,axis=1)
#刪除第一列:各個點的標號[1,2,3,4,5...]
c= np.delete(c,2,axis=1)
#刪除Z座標,只需要統計xy座標
統計xy相同的點的個數
e = []
for (x,y) in (c):
#這裏如果直接統計列表是會報錯的,無法生成hash表所以要先生成這樣的數組的類型,後面纔好統計
e.append((x,y))
然後做一個字典,記錄各個點的個數
h = {}
for i in e:
h[i] = e.count(i)
print()
這樣就可以看到各個點的座標的個數了
{(-139.0, -18.0): 23,
(199.0, -96.0): 23,
(-199.0, -60.0): 23,
(-182.0, -150.0): 23,
(251.0, -60.0): 23,
(-243.0, -102.0): 23,
(208.0, 66.0): 23,...