Visual Studio Express 2013 for Windows Desktop C++ DxLibでゲームを制作しています。
まだまだ力のない初心者です。
以下、質問用に組んだプログラムです。
#include "DxLib.h"
#include "math.h"
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
SetGraphMode(800,600, 32);
SetMainWindowText("DxLib");
ChangeWindowMode(TRUE),
DxLib_Init(),
SetDrawScreen(DX_SCREEN_BACK);
//VECTORですが、2次元で使用しています。
VECTOR A = { 0 };
VECTOR B = { 0 };
VECTOR C = { 0 };
VECTOR P = { 0 };//点Pは、角の二等分線上の点
double r = 300;//仮に設定する半径
//点A,B,Cの設定//点Bは角の中心
/*角の内側に二等分線を表示させたいのです*/
int F = 1;//ここを、0か1に変更し、確かめてみてください。
if (F == 0){
//▼現在のままのプログラムで内側に表示される座標
A = VGet(500, 100, 0);
B = VGet(100, 100, 0);
C = VGet(300, 400, 0);
}
else if (F == 1){
//▼現在のままのプログラムで外側に表示される座標
A = VGet(500, 100, 0);
B = VGet(500, 300, 0);
C = VGet(300, 400, 0);
}
double AngleAB = 0, AngleCB = 0;//AB,CBのatan2での角度
double BisectorAngle = 0;//角の二等分の角度 ->これを求めたいのです。
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0){
AngleAB = atan2(B.y - A.y, B.x - A.x);//取得
AngleCB = atan2(B.y - C.y, B.x - C.x);//取得
BisectorAngle = (AngleAB + AngleCB) / 2.0;
P.x = cos(BisectorAngle)*r + B.x; P.y = sin(BisectorAngle)*r + B.y;
DrawLine(A.x, A.y, B.x, B.y, GetColor(0, 255, 0), 1);//線分AB
DrawLine(C.x, C.y, B.x, B.y, GetColor(0, 255, 0), 1);//線分CB
DrawLine(P.x, P.y, B.x, B.y, GetColor(0, 255, 255), 1);//線分PB
DrawCircle(P.x, P.y, 3, GetColor(0, 255, 255), TRUE);//点Pをわかりやすく
DrawFormatString(A.x, A.y, GetColor(0, 255, 0), "点A");
DrawFormatString(B.x, B.y, GetColor(0, 255, 0), "点B");
DrawFormatString(C.x, C.y, GetColor(0, 255, 0), "点C");
DrawFormatString(P.x, P.y, GetColor(0, 255, 255), "点P");
DrawFormatString(0,0, GetColor(255, 255, 255), "%d番",F);//仮
}
DxLib_End();
return 0;
}
(点Bに代入される座標が変わります。)
0にした場合はちゃんと角の内側に表示されますが、1にした場合は外側に表示されます。
点がどの座標にあっても、角の内側に角の二等分線が表示されるようにするにはどうすればよいのでしょうか。
(外側の場合はπを足せば内側になりますが、外側なのか内側なのかの判断をつけるにはどうすれば良いのでしょうか?)
教えてください。
(※フォーラムルールを読んだつもりですが、質問の仕方に問題がある場合はご指摘くださると助かります。)