python:调整导入的坐标

python:调整导入的坐标,python,coordinates,Python,Coordinates,我有一个python脚本,我在其中导入三角形元素的坐标,以及来自两个独立文本文件的元素定义。我首先为每个三角形元素定义唯一的节点,然后在三角形元素之间定义一个新的矩形元素(这个python脚本为FEM计算编写一个输入文件) 坐标文件如下所示: 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 元素

我有一个python脚本,我在其中导入三角形元素的坐标,以及来自两个独立文本文件的元素定义。我首先为每个三角形元素定义唯一的节点,然后在三角形元素之间定义一个新的矩形元素(这个python脚本为FEM计算编写一个输入文件)

坐标文件如下所示:

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
我想发生的是,三角形元素的节点坐标移动到三角形元素的质心,这样三角形元素之间的矩形元素将得到一个物理厚度

然而,我在python脚本中做了一些错误的事情(见下文)。 脚本中水平线之间的部分应更改坐标。 但是对于我的脚本,添加了额外的坐标,而不是(这里的示例)9个初始坐标。 坐标也没有向正确的方向移动

为什么会发生这种情况?我如何解决

#!/usr/bin/env python

# Inlezen coordinaten
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])

#inlezen elementen
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] )
#---------------------------------------------------------------------
def add_vectors(*points):
  new_x = 0.0
  new_y = 0.0
  for point in points:
    new_x += point[0]
    new_y += point[1]
  return [new_x, new_y]

def subtract_vectors(a, b):
  new_x = a[0] - b[0]
  new_y = a[1] - b[1]
  return [new_x, new_y]


def mul_by_scalar(vector, scalar):
  new_x = vector[0] * scalar
  new_y = vector[1] * scalar
  return [new_x, new_y]

new_triangles = []
for elem in elems:
    new_triangles += [coords[e] for e in elem]

print 'new_triangles =', new_triangles

CM = mul_by_scalar(add_vectors(*new_triangles), 1.0/3)

point_to_CM_vectors = []
for point in new_triangles:
  point_to_CM_vectors.append(subtract_vectors(CM, point))

new_triangle2 = []
#for e,elem in enumerate(elems):
for elem in elems:
    for point, motion in zip(new_triangles, point_to_CM_vectors):
      new_triangle2.append(add_vectors(point, mul_by_scalar(motion, 0.01)))
#      new_triangle2 += [add_vectors(point, mul_by_scalar(motion, 0.01))]

print 'new_triangle2 =', new_triangle2
#---------------------------------------------------------------------
#/usr/bin/env python
#内莱森坐标
打开(“D://Documents//SkyDrive//afstuderen//99 EEM-Abaqus 6.11.2//scripting//\u coordinaren.txt”,“r”)
导入csv
进口itertools
打开(“_coordinaren.txt”)作为文件:
data=csv.reader(文件)
下一步(数据)
coords=[]
coords=([[float(x)表示第x行[1:]表示第x行数据])
#因莱森元素
打开(“D://Documents//SkyDrive//afstuderen//99 EEM-Abaqus 6.11.2//scripting//\u ELEMENTEN.txt”,“r”)
导入csv
进口itertools
打开(“_ELEMENTEN.txt”)作为文件:
data2=csv.reader(文件)
下一步(数据2)
元素=[]
元素=([[int(x)-1表示第x行[1:]表示第2行数据])
#如果需要,翻转原始图元
对于i,枚举中的元素(元素):
ecoords=[coords[e]表示元素中的e]
a=[x2-x1表示x1,x2表示zip(ecoords[0],ecoords[1])]
b=[x2-x1表示x1,x2表示zip(ecoords[1],ecoords[2])]
n=a[0]*b[1]-a[1]*b[0]
如果n<0:
元素[i]=[elem[0],元素[2],元素[1]]
#贝沃金元素
newcoords=[]
newelems=[]
对于元素中的元素:
ecoords=[coords[e]表示元素中的e]
newelem=范围(len(newcoords),len(newcoords)+len(ecoords))
newcoords+=ecoords
newelem.append(newelem)
coherems=[]
对于e,枚举中的元素(元素):
对于[[0,1]、[1,2]、[2,0]]中的边:
eedge=[elem[i]表示边缘中的i]
对于e2,枚举中的elem2(elems[e+1:]):
e2+=e+1
对于[[0,1]、[1,2]、[2,0]]中的边2:
eedge2=[elem2[i]表示第2边中的i]
如果所有([i在eedge中为i在eedge中]):
newedge=[newelems[e][i]表示边缘中的i]
newedge+=[newelems[e2][i]代表edge2中的i]
append(newedge[-1::-1])
#---------------------------------------------------------------------
定义添加向量(*点):
新_x=0.0
新_y=0.0
对于点到点:
新_x+=点[0]
新_y+=点[1]
返回[new_x,new_y]
def减去_向量(a,b):
新的_x=a[0]-b[0]
new_y=a[1]-b[1]
返回[new_x,new_y]
def mul_by_标量(向量,标量):
new_x=向量[0]*标量
new_y=向量[1]*标量
返回[new_x,new_y]
新的_三角形=[]
对于元素中的元素:
新的_三角形+=[坐标[e]表示元素中的e]
打印“新建三角形=”,新建三角形
CM=mul_乘_标量(添加_向量(*新的_三角形),1.0/3)
点到厘米向量=[]
对于新_三角形中的点:
点到向量。追加(减去向量(CM,点))
新的_三角形2=[]
#对于e,枚举中的元素(元素):
对于元素中的元素:
对于点,zip中的运动(新的\u三角形、点到\u CM\u向量):
新的_三角形2.追加(添加_向量(点,多个乘以_标量(运动,0.01)))
#新的_三角形2+=[添加_向量(点,乘以_标量(运动,0.01))]
打印“新建三角形2=”,新建三角形2
#---------------------------------------------------------------------

提前感谢大家的帮助

您正在执行的操作不太清楚,但请尝试用新的_三角形替换新的_三角形+=[coords[e]表示元素中的e]。append([coords[e]表示元素中的e])