#[derive(Copy, Clone, Debug, Default, Eq, PartialEq)]
pub struct Range {
pub dist: u16,
pub confidence: u8,
}
#[derive(Copy, Clone, Debug, Default)]
pub struct PartialScan {
pub radar_speed: u16,
pub start_angle: f32,
pub data: [Range; 12],
pub end_angle: f32,
pub stamp: u16,
pub crc: u8,
}
impl PartialScan {
pub fn get_step(&self) -> f32 {
let diff =
((self.end_angle * 100.0) as usize + 36000 - (self.start_angle * 100.0) as usize) % 36000;
(diff / (self.data.len() - 1)) as f32 / 100.0
}
pub fn get_angle_of_reading(&self, reading_num: u16) -> f32 {
let mut angle = self.start_angle + self.get_step() * (reading_num) as f32;
if angle >= 360.0 {
angle -= 360.0;
}
angle
}
pub fn get_range_in_polar(&self, reading_num: u16) -> (f32, f32) {
let range = self.data[reading_num as usize].dist as f32;
let angle = self.get_angle_of_reading(reading_num);
let mut p_deg = 90.0 - angle;
if p_deg < 0.0 {
while p_deg < 0.0 {
p_deg += 360.0;
}
}
(range, p_deg)
}
}