微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 Python、Pygame 中的 2 个距离与线条进行比较以创建一个框?

如何解决如何将 Python、Pygame 中的 2 个距离与线条进行比较以创建一个框?

所以理论上我想要的很简单。我想在你的地方创造一些东西:

  1. 用户绘制的 2 条线
  2. 具有取第一行并从中取 2 个点的代码
  3. 取其他线 2 分
  4. 从第一行中取出第一个点并将其与(我们称之为)第 2 行的 2 个点进行比较
  5. 对第 1 行的第二个点执行相同的操作
  6. 并绘制将第 1 行的第一个点连接到第 2 行最近的点的线,然后绘制第 1 行的第二个点到(第 2 行的)最后一个点。

听起来有点复杂,但可能是因为我不善于解释。

我的代码在这里 我还想补充一点,函数“draw_line()”只接受“start_pos”和“end_pos”的输入,所以输入的顺序无关紧要。另外“y2,y1”是开始点或,第一个,z 是第二个。

def find_closer_point(self,origin_point,point1,point2):
# find the distance between both points and then choose the closest one to it
# the variables 
x2,x1 = origin_point
y2,y1 = point1
z2,z1 = point2
# the distance formula
calc1 = ((x2 - x1) ^ 2) + ((y2 - y1) ^ 2)
calc2 = ((x2 - x1) ^ 2) + ((z2 - z1) ^ 2)
# to compare the distances (which seems to be the hard part)
try:
    if math.sqrt(calc1) > math.sqrt(calc2):
        self.draw_line((x2,x1),(z2,z1))
except ValueError:
    new_calc1 = math.sqrt(abs(calc1))
    new_calc2 = math.sqrt(abs(calc2))
    if new_calc1 > new_calc2:
        self.draw_line((x2,z1))
    if new_calc1 < new_calc2:
        self.draw_line((x2,(y2,y1))

我似乎找不到问题所在。此外,如果我需要提供更多代码作为上下文,或者如果其他地方有问题,请直接询问。

解决方法

使用 Dot product 找到在某个方向上“更近”的点

def dot(p1,p2):
    return p1[0]*p2[0] + p1[1]*p2[1]
if dot(origin_point,point1) < dot(origin_point,point2):
    self.draw_line(origin_point,point1)
else:
    self.draw_line(origin_point,point2)

2 个向量的 Dot product 等于 2 个向量之间夹角的 余弦乘以两个向量的幅度(长度)。

dot(A,B) == | A | * | B | * cos(angle_A_B)

由此可知,2 个单位向量的 积等于 2 个向量之间夹角的 余弦,因为 unit vector是 1。

uA = normalize(A)
uB = normalize(B)
cos(angle_A_B) == dot(uA,uB)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。