C++の正規化について
現在、ブロックくずしを作っており、弾の速度からの斜め移動の正規化の計算方法がわかりません。
これであっているのでしょうか
仕様ライブラリはopenSiv3Dです。
C++
1コード 2h 3class Ball 4{ 5 //描画する弾 6 Circle ball; 7 //フレームレートを宣言 8 const float frameTime = 1.0f / 60.0f; 9 10 //移動速度 11 float speed = 200; 12 13 //移動方向X 14 float vecX = -150; 15 //移動方向Y 16 float vecY = -300; 17 18 //表示座標X 19 float x; 20 //表示座標Y 21 float y; 22 23 //ボールの半径 24 float radius = 8; 25 26 //ボールを表示する 27 int initFlag = 0; 28 29public: 30 //コンストラクター 31 Ball(); 32 //ボールの描画 33 void Draw(float x, float y, float posY); 34 //ボールの更新 35 void Update(); 36}; 37 38 39Cpp 40//ボールの更新 41void Ball::Update() { 42 //フラグが経っていなかったら描画しません 43 if (initFlag < 1) return; 44 45////////////////////////////////////////////////////////////////// 46 47 //ベクトルの長さの正規化 48 auto length = sqrt(vecX * vecX + vecY + vecY); 49 50 //正規化された移動量 51 auto nomalX = vecX / length; 52 auto nomalY = vecY / length; 53 54 //正規化した速度を代入 55 x += nomalX * (speed * frameTime); 56 y += nomalY * (speed * frameTime); 57 58 if (x >= 800 - radius || x <= radius) vecX *= -1; 59 if (y >= 600 - radius || y <= radius) vecY *= -1; 60//////////////////////////////////////////////////////////////// 61} 62 63//ボールの描画 64void Ball::Draw(float x, float y,float posY) { 65 66 if (initFlag <= 0 && MouseL.up()) { 67 68 //プレイヤーの位置座標X 69 this->x = x; 70 //プレイヤーの位置座標Y 71 this->y = y; 72 73 //プレイヤーの上に作ります 74 this->y -= radius + posY / 2; 75 76 //ボールを作ります 77 ball = Circle(this->x, this->y, radius); 78 79 initFlag += 1; 80 } 81 82 if (initFlag < 1) return; 83 84 //ボールの移動 85 ball.x = this->x; 86 ball.y = this->y; 87 88 //ボールの描画 89 ball.draw(); 90}
void Ball::Update()の関数です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/11 08:19 編集
2021/03/11 08:26