それで色々なサイトを巡り、なんとかそれっぽいものはできたのですが、円が矩形の斜め上にあるときに矩形を斜めにすると
実際の矩形と円は当たっていないのに計算上の0度矩形と円'が当たってる、またはその逆のことが起こっていました。
コードを見直してみたのですが、分からず、sinの丸め誤差かと思ったのですがどうなのでしょうか。
#include "DxLib.h"
#include "math.h"
#define PI 3.1415926535897932384626433832795f
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
ChangeWindowMode(TRUE), SetGraphMode(800, 600, 32),
DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
static int image = LoadGraph("無題.png");
static double Ax, Ay, Bx, By,Br; //実際の座標
static double Aangle; //実際の角度
static double A_x, A_y, B_x, B_y; //当たり判定で使用する座標
static double F_x, F_y; //当たり判定で使用される円に最も近い矩形上の座標
static int Flag = 0;
Ax = 100; Ay = 300; Bx = 400; By = 250; Br = 20; Aangle = 0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
B_x = ((Bx - Ax) * cos(Aangle)) - ((By - Ay) * sin(Aangle)) + Ax; //circle calc
B_y = ((Bx - Ax) * sin(Aangle)) + ((By - Ay) * cos(Aangle)) + Ay;
if (B_x < Ax - 32 / 2) //x calc
F_x = Ax - 32 / 2;
else if (B_x > Ax + 32 / 2)
F_x = Ax + 32 / 2;
else
F_x = B_x;
if (B_y < Ay - 64 / 2) //y calc
F_y = Ay - 64 / 2;
else if (B_y > Ay + 64 / 2)
F_y = Ay + 64 / 2;
else
F_y = B_y;
if ( ((F_x - B_x) * (F_x - B_x)) + ((F_y - B_y) * (F_y - B_y)) < Br * Br) //collision calc
Flag = 1;
else
Flag = 0;
DrawBox((int)Ax - 32 / 2, (int)Ay - 64 / 2, (int)Ax + 32 / 2, (int)Ay + 64 / 2, GetColor(50, 255, 255), TRUE); //draw
DrawCircle((int)B_x, (int)B_y, (int)Br, GetColor(50, 255, 255), TRUE);
DrawCircle((int)F_x, (int)F_y, 3, GetColor(255, 255, 255), TRUE);
DrawRotaGraph((int)Ax, (int)Ay, 1.0, Aangle, image, TRUE);
DrawCircle((int)Ax, (int)Ay, 3, GetColor(255, 255, 255), TRUE);
DrawCircle((int)Bx, (int)By, (int)Br, GetColor(255, 50, 50), TRUE);
DrawFormatString(10, 30, GetColor(50, 255, 50), "Flag = %d", Flag);
}
DxLib_End();
return 0;
}
また、矩形の座標を任意に移動させるようにするコードを省いています。
これを実行し、矩形の位置、角度を試行錯誤してみるとこうなりました。

青と赤が実際に表示されている矩形と円、薄い水色が当たり判定の計算上用いられてる矩形と円です。
実際の図形は接触していませんが計算上の図形は接触していて当たり判定のフラグが1になってしまっています。
こうなる場所は限られていたのでそこまで問題ありませんが直せるなら直したいです。どうかよろしくお願いします。