Source code for logic.radar

import math
from typing import Optional

import glm

from logic.signal import Signal


[docs] class Emitter: """ The Emitter class Provides methods for emitter stimulation """ def __init__(self, range_of_action: int, characteristics: Optional[list] = None): self.range_of_action: int = range_of_action self.characteristics: list = characteristics self.fineness_of_coating = 20 self.radiation_power = 150000 # Watt self.transmit_antenna_gain = 40 # decibel self.coordinates = [] self._calculate_coordinates() def _calculate_coordinates(self): """ Calculate coordinates for signal """ count, ci = 3, 2 for j in range(self.fineness_of_coating + 1): radius = math.sin(j * math.pi / (2 * self.fineness_of_coating)) z = math.cos(j * math.pi / (2 * self.fineness_of_coating)) + 10 count += ci for i in range(count): first_angle = 2 * math.pi / count * i x, y = (math.cos(first_angle) * radius, math.sin(first_angle) * radius) self.coordinates.append(glm.vec3(x, y, z))
[docs] @staticmethod def send_signal(departure_time: int, direction: glm.vec3, speed: glm.vec3, power_multiply: int = 0): """ Create Signal object :param departure_time: Time when the signal was emitted. :type departure_time: int :param direction: Vector of signal direction. :type direction: glm.vec3 :param speed: Vector of signal speed. :type speed: glm.vec3 :param power_multiply: Coefficient for power :type power_multiply: int :return: Signal object :rtype: Signal """ signal = Signal(departure_time, direction, speed, power_multiply) return signal
# send signals to half of sphere
[docs] def send_signals(self, departure_time: int) -> list[Signal]: """ Send signal to half of sphere :param departure_time: Time of sending the signal. :type departure_time: int :return: List of signals :rtype: list[Signal] """ signals = [] for coordinate in self.coordinates: x, y, z = coordinate signals.append(self.send_signal(departure_time, glm.vec3(x, y, z), glm.vec3(x, y, z - 10))) if z <= 10.5: signals.append(self.send_signal(departure_time, glm.vec3(x, y, -z + 20), glm.vec3(x, y, -z + 10))) return signals
[docs] class Receiver: """ The Receiver class Provides object for emitter stimulation. """ def __init__(self, radius: float, position: glm.vec3, characteristics: Optional[list] = None): self.characteristics: Optional[list] = characteristics self.received_signals: list[Optional[Signal]] = [] self.radius: float = radius self.position: glm.vec3 = position
[docs] class Radar: """ The Radar class Provides object for radar simulation. """ def __init__(self, emitter: Emitter = Emitter(80), receiver: Receiver = Receiver(2, glm.vec3(0, 0, 10))): self.emitter: Emitter = emitter self.receiver: Receiver = receiver self.radius: int = 40