2017-02-20 36 views
0

微妙な質問ですが、私があなたを助けてくれることを願っています。 コーディングの割り当てを受け取りましたが、私は解決策に苦労しています。Pythonで領域の座標をマップする

私は座標(X、Y)で武器を持っていると仮定します。それが発砲すると、銃に近接した人々に影響を与える健全な損傷機能が発動する。危険な領域に人(Personクラスのインスタンス)が存在するかどうかにかかわらず、発砲された口径に従って計算する関数を書く必要があります。銃からの音は45度の角度から広がっており、発射された口径に応じて変化する半径を持ちます(ただし、私によって決められていますので、半径は5に等しいと仮定しましょう)。 私の説明は少し面倒かもしれないので、物事をより明確にするために少し整理しようとします:私は、銃が発砲されるたびに呼び出される関数を書く必要があります。この機能は、人が発砲されているガンに危険なほど近接しているかどうかを、彼が聴力障害を負うかのように(別途、事前に作成された機能により)チェックする必要があります。ダメージは、銃からの相対距離に応じて変化します。この領域は、ランダムな半径で45度の角度でガンの端を広げる円錐状に測定されます。

この問題に対処する方法について少し混乱しています。私はすでに各 "Person"の座標を計算する関数を書いています。しかし、私はインパクトエリアのすべての座標を描き出す方法が必要なので、私はa)その人がサウンドダメージ関数の影響を受けるべきかどうかを知り、b)彼がどれくらいひどい打撃を受けたかを伝えることができます彼が4メートル離れていたのに対して、銃から1メートル離れたところに立っていた場合)。

多分私は間違った方法で問題に近づいています - 私は学びたいと思いますし、何か提案を聞いて幸せです。私はどんな専門家でもなく、この問題に最も効率的にアプローチする方法についていくつかの指導を受けるのが大好きです。

編集:私はこれまで書いたコードは次のとおりです。

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はガンがAX、Y位置及びガンが方向を有する場合、それはグローバル座標軸
に対して指している角を有していなければならないグリッドと角度基準

座標有する:)を仮定しますベクトルは角度の代わりにを適用すると、角度をラジアンで返します

人のグローバルx、y人の銃から人の相対ベクトルを得るために銃x、yを引き、atan2で角度を計算すると、ピタゴラスとの距離math.hypot(x, y)

人が角度範囲と距離の範囲内にいるかどうかをテストするだけです

+0

ありがとうございました!一度だけテストしましたが、完璧なソリューションと思われます。今日後で再びテストします。大変感謝しています! –

関連する問題