Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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_Geometry_Computational Geometry - Fatal编程技术网

用于检查点是在长方体内部还是外部的Python代码

用于检查点是在长方体内部还是外部的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]

为了一个特殊的目的,我必须找出一个给定的点是否在长方体内部。通过此链接的帮助()。我已经编写了一个原型代码,可以检查点是否在长方体内

(有关此项的数学,请参阅此链接。)

为此,我们应该定义长方体的3个相互垂直的轴

这是我的密码

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轴对齐?还是相互垂直?它们相互垂直,但无需始终与轴对齐。:-)好的,我的答案的第一句是不需要的。