为了一个特殊的目的,我必须找出一个给定的点是否在长方体内部。借助此链接(https://math.stackexchange.com/questions/1472049/check-if-a-point-is-inside-a-rectangular-shaped-area-3d)的帮助。我已经编写了一个原型代码,可以检查点是否在长方体内
(有关此项的数学,请参阅此链接。)
为此,我们应该定义长方体的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)
如果公共顶点位于原点,则可以正常工作。但如果是一般性的问题,代码就不起作用了。 有人能帮我找到问题吗
如果您的长方体是轴对齐的,那么这样的计算就太过分了——比较坐标就足够了
对于任意方向,您必须稍微修改代码。移除奇怪的结构
你是说
abs
吗?我怀疑算法需要省略点积符号为您的示例返回
Out Out In In
,为我的示例返回In In Out Out
:相关问题 更多 >
编程相关推荐