Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 电子结构映射:多边形形状外的点_Python_Python 2.7 - Fatal编程技术网

Python 电子结构映射:多边形形状外的点

Python 电子结构映射:多边形形状外的点,python,python-2.7,Python,Python 2.7,我一直在从事电子结构制图。我使用python编写代码,其中我有一个类似多边形的形状(不完全是多边形),我有一组x和y坐标。首先,我必须检查这些点是在多边形内部还是外部。我几乎能做到。现在的问题是我想计算多边形和多边形外的点之间的距离。 有人能帮我吗 这是我的密码: 注意:c14list.dat是我从中导入点集的文件,格式为() 拉维斯是一种多边形 将numpy导入为np def maverick(x,y,cir): 如果(x,y)在cir中:返回“在凸包中” 对于范围内的i(len(cir))

我一直在从事电子结构制图。我使用python编写代码,其中我有一个类似多边形的形状(不完全是多边形),我有一组x和y坐标。首先,我必须检查这些点是在多边形内部还是外部。我几乎能做到。现在的问题是我想计算多边形和多边形外的点之间的距离。 有人能帮我吗

这是我的密码:

注意:c14list.dat是我从中导入点集的文件,格式为
()

拉维斯是一种多边形


将numpy导入为np
def maverick(x,y,cir):
如果(x,y)在cir中:返回“在凸包中”
对于范围内的i(len(cir)):
p1=无
p2=无
如果i==0:
p1=cir[0]
p2=cir[1]
其他:
p1=cir[i-1]
p2=cir[i]
如果p1[1]==p2[1]和p1[1]==y和x>min(p1[0],p2[0])和xmin(p1y,p2y):

如果我无法安装numpy,那么我将讨论概念。我想你有两个选择:1)取一个外部点,生成一个从该点到多边形上每个点的相对向量列表,并找到最小的大小。或者2)使用“中心”点的质心来创建相对于()的相对向量。感谢您的建议,但我通过考虑多边形的最近点并将其视为线段来解决问题。计算外部点和线段之间的距离并不太困难。。
import numpy as np

def maverick(x,y,cir):

   if (x,y) in cir: return "In Convex Hull"


   for i in range(len(cir)):
      p1 = None
      p2 = None
      if i==0:
         p1 = cir[0]
         p2 = cir[1]
      else:
         p1 = cir[i-1]
         p2 = cir[i]
      if p1[1] == p2[1] and p1[1] == y and x > min(p1[0], p2[0]) and x < max(p1[0], p2[0]):
         return "In Convex Hull"

   n = len(cir)
   inside = False

   p1x,p1y = cir[0]
   for i in range(n+1):
      p2x,p2y = cir[i % n]
      if y > min(p1y,p2y):
         if y <= max(p1y,p2y):
            if x <= max(p1x,p2x):
               if p1y != p2y:
                  xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
               if p1x == p2x or x <= xints:
                  inside = not inside
      p1x,p1y = p2x,p2y

   if inside: return "In Convex Hull"
   else: return "out of Convex Hull"

laves = [(4.667,0.22701578), (5.667,0.33127494),
(6.283,0.32687551), (11.333,0.26443006),(9.667,0.11122194),(9.333,0.1067382),(5.667,0.09125353),(5,0.1141427),(4.667,0.22701578)]

f = open('c14list.dat','r')
label_arr=[]
x_arr=[]
y_arr=[]

for i in range(69):
 a=f.readline()
 a=str(a).split('\t')
 lent = len(a)
 label_arr.append(a[0])
 x_arr.append(float(a[1]))
 y_arr.append(float(a[lent-1][0:10]))


for i in range(69):
 label=label_arr[i]
 x=x_arr[i]
 y=y_arr[i]
 print label,'\t',x,'\t',y,'\t',maverick(x,y,laves)