Optimaze with new mbed os for study

Dependencies:   TS_DISCO_F746NG BSP_DISCO_F746NG Graphics

RadarDemo/Location.cpp

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

File content as of revision 5:64cafb3c6e7b:

//
// Location.cpp
//

#include "Location.h"
#include "math.h"
#include "Commons.h"

Location::Location()
{
    SetLocation(0,0,0);
}

Location::Location(float x, float y, float height)
{
    SetLocation(x, y, height);
}

void Location::SetLocation(float x, float y, float height)
{
    _x = x;
    _y = y;
    _h = height;

    ToAngular();
}

void Location::SetLocationAngular(float distance, float azimuth, float elevation)
{
    _distance = distance;
    _azimuth = azimuth;
    _elevation = elevation;

    ToCartesian();
}

float Location::GetX()
{
    return _x;
}

float Location::GetY()
{
    return _y;
}

float Location::GetHeight()
{
    return _h;
}

float Location::GetDistance()
{
    return _distance;
}

float Location::GetAzimuth()
{
    return _azimuth;
}

float Location::GetElevation()
{
    return _elevation;
}

void Location::ToAngular()
{
    _distance = (float)sqrt(_x * _x + _y * _y + _h * _h);
    if (_distance > 0)
    {
        if (_x >= 0)
            _azimuth = ((float)M_PI_2 - asinf(_y / _distance));
        else
            _azimuth = (float)(M_PI + M_PI_2 + asinf(_y / _distance));
    }
    else
        _azimuth = 0.f;

    _elevation = _distance > 0 ? asinf(_h / _distance) : 0.f;
}

void Location::ToCartesian()
{
    _x = _distance * sinf(_azimuth);
    _y = _distance * cosf(_azimuth);
    _h = _distance * sinf(_elevation);
}