Optimaze with new mbed os for study

Dependencies:   TS_DISCO_F746NG BSP_DISCO_F746NG Graphics

RadarDemo/Target.cpp

Committer:
ngtkien
Date:
2019-08-23
Revision:
5:64cafb3c6e7b
Parent:
0:d8b9955d2b36

File content as of revision 5:64cafb3c6e7b:

//
// Target.cpp - Simple simulation of radar target
// 

#include "Target.h"
#include "math.h"

Target::Target(int id, float speed, float direction)
{
    Id = id;

    _speed = speed;
    _direction = direction;

    _type = 0;
    _lastUpdateTime = 0;
}


Target::Target(int id, float x, float y, float h, float speed, float direction)
{
    _location.SetLocation(x, y, h);
    _speed = speed;
    _direction = direction;

    _type = 0;
    _lastUpdateTime = 0;
    Id = id;
}

Location Target::GetLocation()
{
    return _location;
}

void Target::SetLocation(float x, float y)
{
    _location.SetLocation(x, y, _location.GetHeight());
}

float Target::GetX()
{
    return _location.GetX();
}

float Target::GetY()
{
    return _location.GetY();
}

float Target::GetAzimuth()
{
    return _location.GetAzimuth();
}

float Target::GetDistance()
{
    return _location.GetDistance();
}

float Target::GetDirection()
{
    return _direction;
}

float Target::GetSpeed()
{
    return _speed;
}

int Target::GetType()
{
    return _type;
}

void Target::UpdateLocationForTime(uint32_t currentTime)
{
    // Calculate time period from last update
    uint32_t timePeriod = currentTime - _lastUpdateTime;
    _lastUpdateTime = currentTime;
    
    float distance = _speed * timePeriod / 3600000;
    float dx = distance * sinf(GetDirection());
    float dy = distance * cosf(GetDirection());
    SetLocation(GetX() + dx, GetY() + dy);
}

void Target::SetLocationAngular(float distance, float azimuth)
{
    _location.SetLocationAngular(distance, azimuth, _location.GetElevation());
}