用于检查点是在长方体内部还是外部的Python代码
为了一个特殊的目的,我必须找出一个给定的点是否在长方体内部。通过此链接的帮助()。我已经编写了一个原型代码,可以检查点是否在长方体内 (有关此项的数学,请参阅此链接。) 为此,我们应该定义长方体的3个相互垂直的轴 这是我的密码用于检查点是在长方体内部还是外部的Python代码,python,geometry,computational-geometry,Python,Geometry,Computational Geometry,为了一个特殊的目的,我必须找出一个给定的点是否在长方体内部。通过此链接的帮助()。我已经编写了一个原型代码,可以检查点是否在长方体内 (有关此项的数学,请参阅此链接。) 为此,我们应该定义长方体的3个相互垂直的轴 这是我的密码 import numpy def dot(v1, v2): return numpy.sqrt(numpy.square(numpy.dot(v1, v2))) def InCuboid ( plist,pnt): c1 = plist[0]
import numpy
def dot(v1, v2):
return numpy.sqrt(numpy.square(numpy.dot(v1, v2)))
def InCuboid ( plist,pnt):
c1 = plist[0]
c2 = plist[1]
c3 = plist[2]
c4 = plist[3]
u1 = numpy.subtract(c1, c2)
u2 = numpy.subtract(c1, c3)
u3 = numpy.subtract(c1, c4)
t = pnt
if dot(u1, c1) <= dot(u1, t) <= dot(u1, c2) and dot(u2, c1) <= dot(u2, t) <= dot(u2, c3) and dot(u3, c1) <= dot(u3,t) <= dot(u3, c4):
return "In"
else :
return "Out"
c1 = [-100,1,-10]
c2 = [-50,1,-10]
c3 = [-100,3.0,-10]
c4 = [-100,1,10]
plst = [c1,c2,c3,c4]
mlst = [[0,0,0],[100,1000,1000],[-80,2,0],[-80,2,1]]
for p in mlst :
print InCuboid(plst,p)
导入numpy
def dot(v1、v2):
返回numpy.sqrt(numpy.square(numpy.dot(v1,v2)))
def孵化器(plist,pnt):
c1=plist[0]
c2=plist[1]
c3=plist[2]
c4=plist[3]
u1=整数减去(c1,c2)
u2=整数减去(c1,c3)
u3=整数减去(c1,c4)
t=pnt
如果点(u1,c1)如果你的长方体是轴对齐的,那么这样的计算是多余的——比较坐标就足够了
对于任意方向,您必须稍微修改代码。移除奇怪的结构
return numpy.sqrt(numpy.square(numpy.dot(v1, v2)))
你的意思是abs
?我怀疑算法需要省略点积符号
def dot(v1, v2):
return numpy.dot(v1, v2)
....
u1 = numpy.subtract(c1, c2)
u2 = numpy.subtract(c1, c3)
u3 = numpy.subtract(c1, c4)
t = pnt
if min(dot(u1, c1), dot(u1, c2)) <= dot(u1, t) <= max(dot(u1, c1), dot(u1, c2))\
and min(dot(u2, c1), dot(u2, c3)) <= dot(u2, t) <= max(dot(u2, c1), dot(u1, c3))\
and min(dot(u3, c1), dot(u3, c4)) <= dot(u3, t) <= max(dot(u3, c1), dot(u3, c4)):
return "In"
else :
return "Out"
如果您的长方体是轴对齐的,那么这样的计算就太过分了——比较坐标就足够了 对于任意方向,您必须稍微修改代码。移除奇怪的结构
return numpy.sqrt(numpy.square(numpy.dot(v1, v2)))
你的意思是abs?我怀疑算法需要省略点积符号
def dot(v1, v2):
return numpy.dot(v1, v2)
....
u1 = numpy.subtract(c1, c2)
u2 = numpy.subtract(c1, c3)
u3 = numpy.subtract(c1, c4)
t = pnt
if min(dot(u1, c1), dot(u1, c2)) <= dot(u1, t) <= max(dot(u1, c1), dot(u1, c2))\
and min(dot(u2, c1), dot(u2, c3)) <= dot(u2, t) <= max(dot(u2, c1), dot(u1, c3))\
and min(dot(u3, c1), dot(u3, c4)) <= dot(u3, t) <= max(dot(u3, c1), dot(u3, c4)):
return "In"
else :
return "Out"
你的长方体轴对齐了吗?@MBo你的意思是与X、Y和Z轴对齐?还是相互垂直?它们相互垂直,但无需始终与轴对齐。:-)好的,我的答案的第一句是不需要的。你的长方体轴对齐了吗?@MBo你的意思是与X、Y和Z轴对齐?还是相互垂直?它们相互垂直,但无需始终与轴对齐。:-)好的,我的答案的第一句是不需要的。