Если вы хотите знать, касаются ли 2 кубика, проверьте, не перекрываются ли кубы во всех трех измерениях.
Если у вас диапазон [ tar_x , tar_x + tar_w ] и 2-й диапазон [ tar_x1 , tar_x1 + tar_w1 ], затем вы можете проверить, перекрывают ли диапазоны:
intersect = tar_x < tar_x1+tar_w1 and tar_x1 < tar_x+tar_w
Сделайте эту проверку для всех 3 измерений:
def touched(tar_x,tar_y,tar_z,tar_w,tar_h,tar_d,tar_x1,tar_y1,tar_z1,tar_w1,tar_h1,tar_d1):
intersect_x = tar_x < tar_x1+tar_w1 and tar_x1 < tar_x+tar_w
intersect_y = tar_y < tar_y1+tar_h1 and tar_y1 < tar_y+tar_h
intersect_z = tar_z < tar_z1+tar_d1 and tar_z1 < tar_z+tar_d
return intersect_x and intersect_y and intersect_z
Если вы хотите знать, находится ли точка внутри кубовидного объема, то вы должны проверить для каждого измерения, если координата tar_w1 находится в диапазоне [tar_x, tar_x + tar_w] :
is_in = tar_x < tar_x1 < tar_x+tar_w
Еще раз проверьте это для всех 3 измерений
def isIn (tar_x, tar_y, tar_z, tar_w, tar_h, tar_d, tar_x1, tar_y1, tar_z1):
is_in_x = tar_x < tar_x1 < tar_x+tar_w
is_in_y = tar_y < tar_y1 < tar_y+tar_h
is_in_z = tar_z < tar_z1 < tar_z+tar_d
return is_in_x and is_in_y and is_in_z
Если вы хотите узнать расстояние от точки до другой точки, напримерцентр кубовидного объема, то вы можете использовать pygame.math.Vector3
и .distance_to()
:
centerPt = pygame.math.Vector3(tar_x + tar_w/2, tar_y + tar_h/2, tar_z + tar_d/2)
point2 = pygame.math.Vector3(tar_x1, tar_y1, tar_z1)
distance = centerPt.distance_to(point2)