如何解决如何将 Python、Pygame 中的 2 个距离与线条进行比较以创建一个框?
所以理论上我想要的很简单。我想在你的地方创造一些东西:
- 有用户绘制的 2 条线
- 具有取第一行并从中取 2 个点的代码
- 取其他线 2 分
- 从第一行中取出第一个点并将其与(我们称之为)第 2 行的 2 个点进行比较
- 对第 1 行的第二个点执行相同的操作
- 并绘制将第 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 举报,一经查实,本站将立刻删除。