【问题标题】:How to check if a turtle is near a stamp using lists如何使用列表检查海龟是否在邮票附近
【发布时间】:2021-05-04 13:33:14
【问题描述】:

如果乌龟靠近列表中的坐标(如下图所示),我希望代码在 python 中为游戏返回 True 语句。在我的游戏中,邮票是你必须在整个游戏中收集的硬币。游戏中的列表有10,000个坐标,如果您对如何制作硬币收集系统有更好的想法,请告诉我!

list_of_coords=[(150.0, -150.0),(50.0, -10.0),(-150.0, 0.0)]

非常感谢!

【问题讨论】:

  • 你的问题太笼统了,不过你可以用毕达哥拉斯定理用笛卡尔坐标计算两点之间的距离。
  • 但这适用于一根绳子,如果我要做一个循环,那将需要很长时间,因为真正的列表有 10000 个不同的值。

标签: python python-3.x list turtle-graphics python-turtle


【解决方案1】:

你可以试试这样的:

list_of_coords = [(150.0, -150.0), (50.0, -10.0), (-150.0, 0.0)]

def close_to_coord(coord):
    return turtle.distance(coord) < 10

if any(map(close_to_coord, list_of_coords)):
    # ...

由于 andmap 是惰性求值的,因此它应该在找到附近的 list_of_coords 后立即停止处理。

【讨论】:

  • 请你解释一下你在做什么?我不明白那个代码:(
  • 如果我想在我的代码中实现它,我需要了解更多。
【解决方案2】:

为此,您可以使用两点之间的欧几里得距离(在 2D 中基本上简化为毕达哥拉定理)。

假设您有这样的海龟坐标(与您提供的坐标样本格式相同,例如 (X,Y) 以像素为单位):

    turtle_coords = (10.0, 10.0)

您可以编写一个函数来计算海龟与任何其他点之间的距离(您也可以使用 numpy 包中的sqrt 函数)。此函数将海龟坐标 (turtle_coords) 作为一对 (X_turtle, Y_turtle) 并将任何兴趣点坐标 (point_coords) 再次作为一对 (X_point, Y_point)。在这些对中,您可以使用 Couple[0] 访问每个 X 值,使用 Couple[1] 访问 Y 值。距离函数如下:

    def distance(turtle_coords, point_coords):
        return ((turtle_coords[0] - point_coords[0])**2 + (turtle_coords[1] - point_coords[1])**2)**0.5

然后,您可以遍历 list_of_coords 变量的所有坐标,以创建海龟与每个兴趣点之间的距离列表。

    distances = []
    for point_coords in list_of_coords:
        distances.append(distance(turtle_coords, point_coords))

然后,您将获得每个提供的坐标与海龟坐标之间的距离列表。然后,您可以评估海龟是否足够接近某些坐标。假设你有一个距离阈值:

    distance_threshold = 10   # Say 10 pixels
    close_to_coords = []
    for distance in distances:
        close_to_coords.append(distance <= distance_threshold)
        # You get a list like [False, False, True, False , etc...]

【讨论】:

  • 这是一个简单的答案,但请下次提供更多信息和代码以获得更准确的答案。
  • 你能解释一下吗?
  • 好吧,如果你知道你的海龟坐标和你每个兴趣点的坐标,然后计算海龟和你每个兴趣点之间的距离,只保留那些比你更近的给定的距离阈值(即到海龟的距离小于距离阈值的距离阈值)。
  • 但是如果我想在我的代码中实现它,我不明白如何。
  • 为此,您可能提供的代码太少。请用更多代码更新您的问题(即使您在缺少某些代码的地方留出空白)。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多