「DXライブラリ」斜め移動も上下移動と同じ速度にしたい。


ピタゴラスの定理の関係で斜めに移動したときに多く移動してしうのでそれを上下に移動したときと同じ移動量の[5]にしたいです、上下左右[5]ですので斜め移動したときの移動量も[5]にしたのですがどうすればいいのでしょうか、数学の知識がないため実装に困ってす。参考書でなんとなく理解したのですがプログラムを組み方？を教えてほしいです。  
数学が苦手なため詳細にお願いしたいです。

[code]

    #include "DxLib.h"
    
    int Key[256];
    int gpUpdateKey() {
        char tmpKey[256];
        GetHitKeyStateAll(tmpKey);
    
        for (int i = 0; i < 256; i++) {
            if (tmpKey[i] != 0) {
                Key[i]++;
            }
            else {
                Key[i] = 0;
            }
        }
        return 0;
    }
    
    // プログラムは WinMain から始まります
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);//画面モード
    
        int x = 320; int y = 240;
        int Handle = LoadGraph("mario.png");
    
        while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0)
        {
            if (Key[KEY_INPUT_RIGHT] >= 1) {
                x+=5.0;
            }
    
            if (Key[KEY_INPUT_LEFT] >= 1) {
                x-=5.0;
            }
    
            if (Key[KEY_INPUT_UP] >= 1) {
                y-=5.0;
            }
    
            if (Key[KEY_INPUT_DOWN] >= 1) {
                y+=5.0;
            }
    
            DrawRotaGraph(x,y,1.0,0.0,Handle,TRUE);
        }
    
        DxLib_End();        // ＤＸライブラリ使用の終了処理
        return 0;        // ソフトの終了 
    }
    
[/code]




まさに質問を解決している[サイト](https://bituse.info/game/19)がありました。

斜め移動で移動する時のx,y座標は`(移動量) * 1 / √2`で求められます。  
そのため、斜め移動の場合は移動量に`1/√2=0.7071067...≒0.71`を掛けて座標を求めるよう修正してください。

[code]

    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0)
    {
        float rate = 1.0f;
        //移動量の倍率係数
        if (Key[KEY_INPUT_LEFT] > 0 || Key[KEY_INPUT_RIGHT] > 0) {
            if (Key[KEY_INPUT_UP] > 0 || Key[KEY_INPUT_DOWN] > 0) {
                //斜めの場合は、移動量の倍率係数を０．７１に設定
                rate = 0.71f;
            }
        }
    
        //実際のx,y座標の移動量
        int move = (int)5 * rate;
    
        if (Key[KEY_INPUT_LEFT] > 0) {
            x -= move;
        }
        if (Key[KEY_INPUT_RIGHT] > 0) {
            x += move;
        }
        if (Key[KEY_INPUT_UP] > 0) {
            y -= move;
        }
        if (Key[KEY_INPUT_DOWN] > 0) {
            y += move;
        }
        DrawRotaGraph(x, y, 1.0, 0.0, Handle, TRUE);
    }
    
[/code]




まさに質問を解決している[サイト](https://bituse.info/game/19)がありました。

斜め移動で移動する時のx,y座標は`(移動量) * 1 / √2`で求められます。  
そのため、斜め移動の場合は移動量に`1/√2=0.7071067...≒0.71`を掛けて座標を求めるよう修正してください。

[code]

    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0)
    {
        float rate = 1.0f;
        //移動量の倍率係数
        if (Key[KEY_INPUT_LEFT] > 0 || Key[KEY_INPUT_RIGHT] > 0) {
            if (Key[KEY_INPUT_UP] > 0 || Key[KEY_INPUT_DOWN] > 0) {
                //斜めの場合は、移動量の倍率係数を０．７１に設定
                rate = 0.71f;
            }
        }
    
        //実際のx,y座標の移動量
        int move = (int)5 * rate;
    
        if (Key[KEY_INPUT_LEFT] > 0) {
            x -= move;
        }
        if (Key[KEY_INPUT_RIGHT] > 0) {
            x += move;
        }
        if (Key[KEY_INPUT_UP] > 0) {
            y -= move;
        }
        if (Key[KEY_INPUT_DOWN] > 0) {
            y += move;
        }
        DrawRotaGraph(x, y, 1.0, 0.0, Handle, TRUE);
    }
    
[/code]

