#pragma once

#include "DllDefines.h"

/////////////////////////////////////////////////////////////////////////////
// CMyPoint

class UTILITYDLL CMyPoint
{
public:
    CMyPoint()
    {
        x = 0;
        y = 0;
    }

    double x;
    double y;
};

/////////////////////////////////////////////////////////////////////////////
// CThreePoint
//              x3, y3
//               _______________
//              |               |
//              |       -       |
//              |       }       |
//              |   + __|___-   |
//              |       |       |
//              |       |       |
//              |       +       |
//              |_______________|
//
//              x1, y1          x2, y2
//
//  dx = x3 - x1 / No of y pt
//  dy = y2 - y1 / No of x pt
/////////////////////////////////////////////////////////////////////////////
// tan      theta   = adjacent / opposite   = y / x
// cos      theta   = adjacent / hypo       = x / hypo
// sine     theta   = opposite / hypo       = y / hypo
// cotan    theta   = opposite / adjacent   = x / y
// secant   theta   = hypo / adjacent       = hypo / x
// cosecant theta   = hypo / opposite       = hypo / y
constexpr auto PI            = 3.1415926535897932384626433832795;
constexpr auto RAD_TO_DEGREE = 180 / PI; // 1 RADIAN = 57.29577951

class UTILITYDLL CThreePoint
{
public:
    CThreePoint();

    enum
    {
        PT1,
        PT2,
        PT3,
    };

    double Getx(int iPt);

    double Gety(int iPt);

    void Setx(int iPt, double x);

    void Sety(int iPt, double y);

    void Setx(double p1, double p2, int iPitchStep = 0);

    void Setx(double p1, double p2, double p3, int iStep = 0, int iPitchStep = 0);

    void Sety(double p1, double p2, int iStep = 0);

    void Sety(double p1, double p2, double p3, int iStep = 0, int iPitchStep = 0);

    double Pitchx(void);

    double Pitchy(void);

    double Dx(void);

    double Dy(void);

    double Xcentre(void);

    double Ycentre(void);

    //  get theta in radian
    double Theta();

    //  get theta in degree
    double ThetaInDegree();

    double x,
        y;

protected:
    CMyPoint pt1,
        pt2,
        pt3;
    CMyPoint delta;
    CMyPoint pitch;
};