この現象を解決したいのですがどうすればいいのでしょうか。
変数testには0から360までのdouble型の値が入っているとします。
#include "DxLib.h"
#include <stdio.h>
#include <math.h>
double map(double a1, double a2, double b1, double b2, double s);
void Display();
int dx = 500, dy = 50;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//ウインドウサイズ設定
SetGraphMode(dx, dy, 32);
//ログを出力しない
SetOutApplicationLogValidFlag(FALSE);
// ウインドウモードで起動
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;
// 描画先を裏画面にする
SetDrawScreen(DX_SCREEN_BACK);
//ウインドウがアクティブではない状態でも処理を続行
SetAlwaysRunFlag(TRUE);
/*--------------------------------
メインループ
-----------------------------------*/
while (!ProcessMessage())
{
ClearDrawScreen();
//各種データの表示
Display();
// 裏画面の内容を表画面に反映
ScreenFlip();
}
DxLib_End();
return 0;
}
void Display(){
static double test = 0;
static int r;
if (test < 0){ r = 1; }
else if (test > 360){ r = 0; }
if (r){ test += 0.1; }
else{ test -= 0.1; }
DrawFormatString(map(0, 360, 0, dx, test) - 3, 19, -1, "N");
DrawFormatString(map(0, 360, 0, dx, fmod(test + 90, 360)) - 3, 19, -1, "W");
DrawFormatString(map(0, 360, 0, dx, fmod(test + 180, 360)) - 3, 19, -1, "S");
DrawFormatString(map(0, 360, 0, dx, fmod(test + 270, 360)) - 3, 19, -1, "E");
for (int k = 0; k <= dx / 10; k++){
DrawLine(map(0, 360, 0, dx, ((int)test + k * 10) % 360), 7, map(0, 360, 0, dx, ((int)test + k * 10) % 360), 15, -1, 2);
if (k % 9 == 0 || k == 0){
DrawLine(map(0, 360, 0, dx, fmod(test + k * 10, 360)), 7, map(0, 360, 0, dx, fmod(test + k * 10, 360)), 18, -1, 2);
}
}
}
//map()のc言語版
double map(double a1, double a2, double b1, double b2, double s)
{
if (s<a1){//範囲外の値が入力されたら
return 0;
}
else if (s>a2){
return 0;
}
else{
return b1 + (s - a1)*(b2 - b1) / (a2 - a1);
}
}