我有一個python腳本,其中我導入三角形元素的座標,並從兩個單獨的文本文件中導入元素定義。Python:調整座標到重心
座標文件看起來如下:
id,x,y,
1, 0, 0
2, 0, 1
3, 0, 2
4, 1, 0
5, 1, 1
6, 1, 2
7, 2, 0
8, 2, 1
9, 2, 2
元件文件看起來像這樣:
id, n1, n2, n3
1, 1, 2, 4
2, 1, 2, 5
3, 2, 3, 5
4, 3, 5, 6
5, 5, 6, 8
6, 6, 8, 9
7, 5, 7, 8
8, 4, 5, 7
在腳本我定義一個新的元件(矩形)時三角形單元的兩個邊緣在同一個地方。我首先爲每個三角形元素定義唯一的節點(所以元素不再共享同一個節點),然後我通過角落中的四個節點定義一個新的元素。下面
這只是正常 見圖像,然而在新定義的元素的厚度爲零。而且我確實希望讓他們有一個無形的厚度。因此,我想調整三角形元素的節點的座標,並將它們稍微移動到元素的重心。
如何找到三角形單元的重心,然後在單元重心方向上以0.001的水平值和0.001的垂直距離值更改節點的座標?
腳本目前,我有如下:
#!/usr/bin/env python
open("D://Documents//SkyDrive//afstuderen//99 EEM - Abaqus 6.11.2//scripting//_COORDINATEN.txt", "r")
import csv
import itertools
with open("_COORDINATEN.txt") as file:
data = csv.reader(file)
next(data)
coords = []
coords = ([[float(x) for x in line[1:]] for line in data])
open("D://Documents//SkyDrive//afstuderen//99 EEM - Abaqus 6.11.2//scripting//_ELEMENTEN.txt", "r")
import csv
import itertools
with open("_ELEMENTEN.txt") as file:
data2 = csv.reader(file)
next(data2)
elems = []
elems = ([[int(x)-1 for x in line[1:]] for line in data2])
#Flip the original elements if required
for i,elem in enumerate(elems):
ecoords = [coords[e] for e in elem]
a = [x2-x1 for x1,x2 in zip(ecoords[0],ecoords[1])]
b = [x2-x1 for x1,x2 in zip(ecoords[1],ecoords[2])]
n = a[0]*b[1]-a[1]*b[0]
if n < 0:
elems[i] = [ elem[0], elem[2], elem[1] ]
#bewerking elementen
newcoords = []
newelems = []
for elem in elems:
ecoords = [coords[e] for e in elem]
newelem = range(len(newcoords), len(newcoords)+len(ecoords))
newcoords += ecoords
newelems.append(newelem)
cohelems = []
for e,elem in enumerate(elems):
for edge in [[0,1],[1,2],[2,0]]:
eedge = [elem[i] for i in edge]
for e2,elem2 in enumerate(elems[e+1:]):
e2 += e+1
for edge2 in [[0,1],[1,2],[2,0]]:
eedge2 = [elem2[i] for i in edge2]
if all([i in eedge2 for i in eedge]):
newedge = [newelems[e][i] for i in edge ]
newedge += [newelems[e2][i] for i in edge2]
cohelems.append(newedge[-1::-1])
你看過嗎? http://en.wikipedia.org/wiki/Centroid#Of_triangle_and_tetrahedron –
謝謝你的回覆,我知道如何找到三角形的重心。但是我不知道如何在Python中編程,特別是如何改變三角形元素在重心方向上的座標 – user1967364