2017-02-20 5 views
0

Немного сложный вопрос, но я надеюсь, что вы можете мне помочь. Я получил задание кодирования, и у меня возникли проблемы с решением проблемы.Координаты карты области в Python

Ситуация такова: предположим, что у меня есть оружие в координатах (X, Y); Когда он стреляет, появляется функция звукового повреждения, которая затрагивает людей в непосредственной близости от пистолета. Мне нужно написать функцию, которая будет вычислять - в соответствии с калибра, который уволен - независимо от того, присутствует ли человек (экземпляр класса Person) в опасной зоне. Звук из пистолета простирается от 45-градусного угла и имеет радиус, который изменяется в соответствии с калибром, который стреляет (но предопределен мной, поэтому допустим, что радиус равен 5). Мое объяснение может быть немного грязным, поэтому я постараюсь немного его организовать, чтобы сделать все более ясным: мне нужно написать функцию, которая вызывается всякий раз, когда запускается пушка. Функция должна проверять, находится ли человек в опасной близости от пушки, стреляющего, как если бы он был нанесен повреждением его слуху (посредством отдельной, предварительно сделанной функции). Масштаб повреждения зависит от относительного расстояния человека от пистолета. Площадь измеряется в конусе, который разбрасывает край пистолета под углом 45 градусов в случайном радиусе.

Я немного смущен относительно того, как решить эту проблему. Я уже написал функцию, которая вычисляет координаты каждого «Лица». Но мне нужен способ наметить все координаты области удара, чтобы я мог: а) указать, должен ли человек быть затронут функцией звукового повреждения и b) рассказать, как сильно он был поражен (поскольку ущерб будет хуже если он стоял на расстоянии 1 метра от пистолета, а не 4 метра).

Возможно, я неправильно подхожу к проблеме - я хочу учиться и рад выслушать любые предложения. Я никоим образом не являюсь экспертом и хотел бы, возможно, получить некоторые указания относительно того, как наиболее эффективно подойти к этой проблеме.

Edit: код, который я написал до сих пор является следующее:

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 координатной сетки и опорный угол

пистолет должен иметь топор, у позиции и угол, который он указывает относительно глобальной координатной оси
если оружие имеет направление вектор вместо угла только примените math.atan2(x, y), который вернет угол в радианах

вычесть пушку x, y из человека в глобальном положении x, y, чтобы получить пистолет для человека относительный вектор, рассчитать угол с atan2, расстояние от Пифагора math.hypot(x, y)

затем просто проверьте, находится ли человек в пределах диапазона углов и дальности

+0

Спасибо, друг! только проверял его один раз, но кажется идеальным решением. проверит его позже позже. Очень ценим! –