Python 电子结构映射:多边形形状外的点
我一直在从事电子结构制图。我使用python编写代码,其中我有一个类似多边形的形状(不完全是多边形),我有一组x和y坐标。首先,我必须检查这些点是在多边形内部还是外部。我几乎能做到。现在的问题是我想计算多边形和多边形外的点之间的距离。 有人能帮我吗 这是我的密码: 注意:c14list.dat是我从中导入点集的文件,格式为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))
()
拉维斯是一种多边形
将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)