在python中以编程方式附加列表

2024-10-03 19:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我在程序上附加两个列表时遇到一些问题。我想找出一个点的列表是在边上还是在多边形内部(它们不能在外部)

  1. “pedges”是在Abaqus中形成闭合多边形的边的列表

  2. “区域”是“浮动”列表。

  3. 有一个内置函数叫做getDistance,我确信它工作得很好(来自Abaqus)

    a)如果一个点位于边上,则此位置的面积将添加到areas_onEdge=[]

    b)如果一个点不在边上,则此位置的区域将添加到areas_inside=[]

  4. 最后我计算sum(areas_inside)/areaShell

我试过一些直截了当的代码,但不起作用。在

我做错什么了?在

areaShell=368.97;
areas_onEdge=[]
areas_inside=[]

points=[(923.9,562.0244,0),(923.9,570.8333,0),(914.1,568.6853,0),(923.9,554.1,0),(928.8,568.6853,0),(919,579.2,0)]
areas=[787.2464,368.97,73984.02,42012.99,73984.02,44627.33]
print 'points Inter '.join(map(str,points));
print 'Areas Inter '.join(map(str,areas));

for i in range(0,len(areas)-1):
    if p.getDistance(points[i],pedges[i])< 0.0001: #Distance between a point and an edge
        areas_onEdge.append(areas[i])
    else:
        areas_inside.append(areas[i])

result=sum(areas_inside)/areaShell

已编辑

根据马修斯的回答:

^{pr2}$

有没有可能把三张这样的单子压缩成“拉特”的比率?在

for point, area,areaR in zip(pointsInter_proj, areasInter,areasRev):
    edges_distances = [p.getDistance(point, pedge) for pedge in pedges]
    if min(edges_distances) >=0:
        ratt.append(area/areaR);

Tags: in区域列表for多边形pointspointinside
1条回答
网友
1楼 · 发布于 2024-10-03 19:21:54

也许,你的问题出在for循环中。在

首先,由于您的范围只到len(areas)-1,所以没有遍历所有区域。在Python中,范围的结束定界符不包括在生成的列表中,例如,range(0, 5)生成列表[0, 1, 2, 3, 4]。在

另外,你只把每个点和一个边做比较,据我所知,你要把一个点和所有的边进行比较。在

这个循环修正了我在这里提出的两点:

for i in range(len(areas)):
    is_on_edge = False

    for j in range(len(pedges)):
        if p.getDistance(points[i], pedges[j]) < 0.0001:
            areas_onEdge.append(areas[i])
            is_on_edge = True
            break

    if not is_on_edge:
        areas_inside.append(areas[i])

这是做同样事情的另一种方式(在我看来更像Python):

^{pr2}$

相关问题 更多 >