【发布时间】:2021-08-18 04:57:19
【问题描述】:
在我使用 Pygame 编写的游戏中,我在从 (0,0) 到 (1,1) 的框中有一个二维点 (x,y)(边长为 1 的完美正方形)。
我想在alpha 方向上计算从点到框边界的欧几里得距离,其中alpha 是以弧度为单位逆时针测量的方位角方向,从alpha=0 作为x 轴方向开始。
我写了一个 python 代码来计算这个距离,但我不确定这是最有效/最干净的方法:
import numpy as np
def get_distance_to_boundary(x, y, angle):
cos_angle, sin_angle = np.cos(angle), np.sin(angle)
if cos_angle == 0:
return y if sin_angle < 0 else 1 - y
if sin_angle == 0:
return x if cos_angle < 0 else 1 - x
x_target = 1 if cos_angle > 0 else 0
y_target = y + (x_target - x) * np.tan(angle)
if y_target > 1:
return np.fabs((1 - y) / sin_angle)
if y_target < 0:
return np.fabs(y / sin_angle)
return np.sqrt((x_target - x) ** 2 + (y_target - y) ** 2)
有更好的方法吗?
插图:
【问题讨论】:
标签: python numpy distance euclidean-distance