2017-02-20 38 views
0

有點棘手的問題,但我希望你能幫助我。 我收到了一個編碼任務,並且在解決方案中遇到了一些麻煩。Python中的一個區域的地圖座標

情況是這樣的:假設我有座標爲(X,Y)的武器;當它發生火災時,會發生聲音損害功能,影響靠近槍支的人員。我需要編寫一個函數,根據被解僱的口徑計算 - 在危險區域是否存在一個人(一個Person類的實例)。槍的聲音從45度角展開,其半徑根據被擊發的口徑而變化(但是由我預先確定,所以我們假設半徑等於5)。 我的解釋可能有點雜亂,所以我會盡量組織一點,以使事情更清楚:我需要編寫一個函數,每當槍被解僱時調用。該功能需要檢查一個人是否與被髮射的槍靠得很近,好像他會受到損害(通過單獨的預製功能)。傷害根據人與槍的相對距離而縮放。該區域以錐體形式測量,該錐體以隨機半徑以45度角展開槍的邊緣。

我對如何解決這個問題有點困惑。我已經寫了一個函數來計算每個「Person」的座標。但是我需要一種方法來繪製出影響區域的所有座標,以便我能夠: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) 

我沒碰過的實際功能我需要寫,因爲我不知道在哪裏甚至開始的代碼。 ..

在此先感謝! :)

+0

提供您迄今爲止編寫的任何代碼,我們無法完全爲您完成您的代碼。 :) –

+0

你能否列出一些你想要推斷的人物及其座標造成的傷害?與文本牆相比,那麼看到問題會更容易一些。 –

+1

根據平方反比法則,聲音會減弱,這很容易編碼:https://en.wikipedia.org/wiki/Inverse-square_law#Sound_in_a_gas –

回答

0

假設你有一個歐氏2D座標網格和角度參考

槍應該具有斧,y位置和它指向相對於全局座標一個角軸
如果槍具有一個方向矢量,而不是一個角度只是適用math.atan2(x, y),這將在弧度返回角度

從人全局x減去槍的x,y,y位置拿到槍的人相對矢量,計算角度atan2中,與畢達哥拉斯的距離math.hypot(x, y)

然後只是測試該人是否在角度範圍和距離範圍內

+0

謝謝隊友!只測試一次,但似乎是一個完美的解決方案。將在今天晚些時候再次測試。不勝感激! –