Boids シミュレーションを作成しようとしています。そのためには、移動および回転する三角形が必要です。
Triangle
と構造体を作りましたBoid
。
struct Triangle
{
olc::vf2d p1 = { 0.0f, 0.0f };
olc::vf2d p2 = { -5.0f, 10.0f };
olc::vf2d p3 = { 5.0f, 10.0f };
};
struct Boid
{
Boid()
{
}
Boid(olc::vf2d _position, float _angle) : position(_position), angle(_angle)
{
};
olc::vf2d position = { 0.0f, 0.0f };
float angle = 0.0f;
};
次に、上記の 2 つの構造体をインスタンス化して、boid と三角形を作成しました。
Boid boid = Boid(olc::vf2d(300, 150), 0.0f)
Triangle triangle;
今ここに動作しないビットがあります。
//Everything here is in a while loop
boid.angle += 0.005f;
//rotation and offset
float x1 = triangle.p1.x * cosf(boid.angle) + boid.position.x;
float y1 = triangle.p1.y * sinf(boid.angle) + boid.position.y;
float x2 = triangle.p2.x * cosf(boid.angle) + boid.position.x;
float y2 = triangle.p2.y * sinf(boid.angle) + boid.position.y;
float x3 = triangle.p3.x * cosf(boid.angle) + boid.position.x;
float y3 = triangle.p3.y * sinf(boid.angle) + boid.position.y;
FillTriangle(
(int)x1, (int)y1,
(int)x2, (int)y2,
(int)x3, (int)y3,
olc::BLUE
)
ここで私がやろうとしているのは、各ポイントを同じ角度だけオフセットして回転させることです。私はこれを行うことで、3 つの点が三角形構造を維持することを望んでいました (移動と回転がまったく同じであるため) が、そうではなく、本当に奇妙に回転します。三角形を適切に移動および回転するにはどうすればよいですか? また、誰かが私がやっていることの理由を説明してくれたらうれしいです。私はこのようなことに慣れていません。