qmath.cpp

来自「BCB下的高效开发包。包含大并发的网络库」· C++ 代码 · 共 79 行

CPP
79
字号
//---------------------------------------------------------------------------


#pragma hdrstop
#include "QMath.h"
#include <math.h>
#pragma package(smart_init)
//---------------------------------------------------------------------------
void GetVec2D(int* pX, int* pY, int Size, int Direct)
{
        const double MathDirect = (double)(Direct) * 3.1415927 / 180;
        if (pX)
                *pX = (int)(cos(MathDirect) * Size);
        if (pY)
                *pY = (int)(sin(MathDirect) * Size);
        return;
}
//---------------------------------------------------------------------------
void GetScreenVec2D(int* pX, int* pY, int Size, int Direct)
{
        GetVec2D(pX, pY, Size, Direct - 90);
}
//---------------------------------------------------------------------------
void GetSDFromVec2D(int* pSize, int* pDirect, int X, int Y)
{
        if (pSize)
                *pSize = (int)sqrt(X * X + Y * Y);
        if (pDirect) {
                if (0 == X && 0 == Y) {
                        *pDirect = 0;
                } else {
                        *pDirect = (int)(360 + atan2(Y, X) * 180 / 3.1415927) % 360;
                }
        }
}
//---------------------------------------------------------------------------
void GetSDFromScreenVec2D(int* pSize, int* pDirect, int X, int Y)
{
        GetSDFromVec2D(pSize, pDirect, X, Y);
        if (pDirect)
                *pDirect = (*pDirect + 90 + 360) % 360;
}

//---------------------------------------------------------------------------
void GetVec2DDB(double* pX, double* pY, double Size, int Direct)
{
        const double MathDirect = (double)(Direct) * 3.1415927 / 180;
        if (pX)
                *pX = (double)(cos(MathDirect) * Size);
        if (pY)
                *pY = (double)(sin(MathDirect) * Size);
        return;
}
//---------------------------------------------------------------------------
void GetScreenVec2DDB(double* pX, double* pY, double Size, int Direct)
{
        GetVec2DDB(pX, pY, Size, Direct - 90);
}
//---------------------------------------------------------------------------
void GetSDFromVec2DDB(double* pSize, int* pDirect, double X, double Y)
{
        if (pSize)
                *pSize = (double)sqrt(X * X + Y * Y);
        if (pDirect) {
                if (0 == X && 0 == Y) {
                        *pDirect = 0;
                } else {
                        *pDirect = (int)(360 + atan2(Y, X) * 180 / 3.1415927) % 360;
                }
        }
}
//---------------------------------------------------------------------------
void GetSDFromScreenVec2DDB(double* pSize, int* pDirect, double X, double Y)
{
        GetSDFromVec2DDB(pSize, pDirect, X, Y);
        if (pDirect)
                *pDirect = (*pDirect + 90 + 360) % 360;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?