在Python中映射区域的坐标

时间:2017-02-20 19:22:47

标签: python area

有点棘手的问题,但我希望你能帮助我。 我已收到编码任务,而且我在解决问题时遇到了一些麻烦。

情况是这样的:假设我有一个坐标(X,Y)的武器;当它发射时,声音损坏功能会起作用,影响靠近枪的人。我需要编写一个函数来计算 - 根据被激发的口径 - 是否在危险区域中存在一个人(一个Person类的实例)。来自枪的声音从45度角展开,其半径根据射击的口径而变化(但由我预先确定,所以让我们假设半径等于5)。 我的解释可能有点混乱,所以我会尝试组织它以使事情变得更清楚:我需要编写一个函数,只要枪被射击就会被调用。该功能需要检查一个人是否处于危险的靠近被射击的枪的位置,好像他是否会对他的听力造成损害(通过单独的预制功能)。伤害根据人与枪的相对距离而变化。该区域以锥形测量,该锥形以45度角随机半径展开枪的边缘。

我对如何解决这个问题感到有些困惑。我已经编写了一个函数来计算每个" Person"的坐标。但是我需要一种方法来绘制冲击区域的所有坐标,以便我可以a)判断这个人是否应该受到声音损坏功能的影响,并且b)告诉他被击中的程度有多严重(因为伤害会更糟)如果他站在离枪一米远的地方而不是4米远的地方)。

也许我以错误的方式解决问题 - 我想学习并乐于倾听任何建议。我无论如何都不是专家,并希望能够以最有效的方式获得如何解决这个问题的方向。

编辑:到目前为止我写的代码如下:

class Soldier(object):
def __init__(self):
    # Soldier ID is a randomly generated string including of 3 numbers.
    ID = str(int(random.random() * 1000))
    self.ID = ID
    # soldier's position is set by default to [0,0]
    self.position = [0,0]
def getID(self):
    # gets the ID number (string) of the instance
    print (self.ID)
def setPosition(self, position):
    # sets the position (a list) of the instance
    self.position = position
def getPosition(self):
    # gets the position (list) of the instance
    print(self.position)

def randomize_soldier_position(soldiersList):
"""
Gets as input a list of instances of soldiers, and assigns a random location to each one of the instances.
"""
for i in soldiersList:
    # for the values of X and Y we generate a random floating point number extending to 3 digits. 
    X = round((random.random() * 100), 3)
    Y = round((random.random()* 100), 3)
    # sets the [X,Y] values for each of the instances.
    i.setPosition([X,Y])
    print(i.position)

我还没有触及我需要写的实际功能的代码,因为我不知道从哪里开始......

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

假设您有欧几里德2D坐标网格和角度参考

枪应具有x,y位置和相对于全局坐标轴指向的角度 如果枪具有方向向量而不是角度,则只应用math.atan2(x, y),这将以弧度返回角度

从人的全局x,y位置减去枪x,y以获得枪到人的相对向量,用atan2计算角度,与毕达哥拉斯的距离math.hypot(x, y)

然后测试该人是否在角度范围和距离范围内