【问题标题】:Map coordinates of an area in PythonPython中某个区域的地图坐标
【发布时间】:2017-02-20 19:22:47
【问题描述】:

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

情况是这样的:假设我在坐标 (X,Y) 上有一把武器;当它开火时,会启动声音伤害功能,影响靠近枪的人。我需要编写一个函数来计算 - 根据被解雇的口径 - 一个人(Person 类的一个实例)是否存在于危险区域。枪声从 45 度角向外扩散,其半径会根据发射的口径而变化(但由我预先确定,因此假设半径等于 5)。 我的解释可能有点混乱,所以我会尝试稍微组织一下以使事情更清楚:我需要编写一个在开枪时调用的函数。该功能需要检查一个人是否在危险地靠近被开火的枪,就好像他会受到听力损伤一样(通过单独的预制功能)。伤害程度取决于人与枪的相对距离。该区域是在一个锥体中测量的,该锥体以 45 度角以随机半径展开枪的边缘。

我对如何解决这个问题有点困惑。我已经写了一个函数来计算每个“人”的坐标。但是我需要一种方法来绘制影响区域的所有坐标,以便我可以 a) 判断该人是否应该受到声音伤害功能的影响 b) 判断他受到的打击有多严重(因为伤害会更严重如果他站在离枪 1 米远而不是 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)

我还没有触及我需要编写的实际函数的代码,因为我什至不知道从哪里开始......

提前致谢! :)

【问题讨论】:

  • 提供您迄今为止编写的任何代码,我们无法完全为您编写代码。 :)
  • 你能列出你想从他们的坐标推断出关于这个人的事情和他们的伤害吗?与文字墙相比,这样会更容易看到问题。
  • 声音会根据平方反比定律减弱,这很容易编码:en.wikipedia.org/wiki/Inverse-square_law#Sound_in_a_gas
  • 我不确定我是否完全理解你,但我会试一试。我不控制对人造成伤害的功能,我拥有的关于任何给定人的唯一信息是他的坐标。函数本身(我应该写的)将士兵的位置、枪的口径、枪的位置和枪的方向作为参数。
  • 我编辑并插入了我已经写好的代码,谢谢提及! :)

标签: python area


【解决方案1】:

假设你有一个欧几里得二维坐标网格和角度参考

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

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

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

【讨论】:

  • 谢谢伙计!只测试过一次,但似乎是一个完美的解决方案。今天晚些时候将再次测试它。非常感谢!
猜你喜欢
  • 2017-07-29
  • 2012-10-19
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
相关资源
最近更新 更多