5 #include <Framework/Shape.h>
6 #include <Utility/IMotion.h>
41 template <
class TSpeed>
63 template <
class TSpeed>
75 Bound(
const TSpeed &速度,
const Rect& 移動範囲,
double 進行方向) :
86 if (進行方向 >
PAI / 2 && 進行方向 <
PAI * 3 / 2)
94 if (進行方向 < PAI / 2 || 進行方向 >
PAI * 3 / 2)
103 進行方向 =
PAI * 2 - 進行方向;
114 if (進行方向 < 0) 進行方向 +=
PAI * 2;
115 if (進行方向 >
PAI * 2) 進行方向 -=
PAI * 2;
117 移動対象->
MoveA(speed.Update(), 進行方向);
123 template <
class TSpeed>
141 const double nowSpeed = speed.Update();
142 const double lx = 目標座標.
GetX() - 移動対象->
GetX();
143 const double ly = 目標座標.
GetY() - 移動対象->
GetY();
145 if (lx * lx + ly * ly <= nowSpeed * nowSpeed)
152 const double angle = atan2(ly, lx);
153 移動対象->
MoveA(nowSpeed, angle);
160 template <
class TSpeed>
176 Orbit(
const TSpeed &角速度 ,
double 半径X ,
double 半径Y ,
double 初期進行方向 = 0.0) :
180 角度(初期進行方向 -
PAI / 2),
181 前移動量X(cos(初期進行方向 -
PAI/2) * 半径X),
182 前移動量Y(sin(初期進行方向 -
PAI/2) * 半径Y)
188 角度 += speed.Update();
190 const double nextX = cos(角度) * 半径X;
191 const double nextY = sin(角度) * 半径Y;
193 移動対象->
Move(nextX - 前移動量X, nextY - 前移動量Y);
221 移動対象->
Move(randX-移動X, randY-移動Y);
目標座標に移動.
Definition: Motion.h:126
const double PAI
円周率
Definition: SDX.h:26
矩形を表す図形クラス.
Definition: Rect.h:22
virtual double GetAngle() const
角度を取得する.
Definition: IPosition.h:56
double GetBottom() const
下端のY座標を取得.
Definition: Rect.h:136
double GetTop() const
上端のY座標を取得.
Definition: Rect.h:124
double GetRight() const
右端のX座標を取得.
Definition: Rect.h:130
double GetLeft() const
左端のX座標を取得.
Definition: Rect.h:118
double GetY() const override
Y座標を取得.
Definition: Point.h:68
円周上を移動.
Definition: Motion.h:163
Bound(const TSpeed &速度, const Rect &移動範囲, double 進行方向)
速度と移動範囲、最初の移動方向を指定.
Definition: Motion.h:75
点を表す図形クラス.
Definition: Point.h:22
移動方法のインターフェース.
Definition: IMotion.h:14
ToFront(const TSpeed &速度)
速度を指定.
Definition: Motion.h:51
bool Update(IPosition *移動対象) override
Motion終了時はfalseを返す.
Definition: Motion.h:138
virtual double GetY() const =0
Y座標を取得.
bool Update(IPosition *移動対象) override
Motion終了時はfalseを返す.
Definition: Motion.h:217
Vibrate(double 最大振れ幅)
コンストラクタ.
Definition: Motion.h:213
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
ToPoint(const TSpeed &速度, const Point &目標座標)
コンストラクタ.
Definition: Motion.h:133
bool Update(IPosition *移動対象) override
Motion終了時はfalseを返す.
Definition: Motion.h:185
bool Update(IPosition *移動対象) override
Motion終了時はfalseを返す.
Definition: Motion.h:81
範囲内で跳ね返る.
Definition: Motion.h:66
その場所で停止.
Definition: Motion.h:34
前方に移動.
Definition: Motion.h:44
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
位置と方向を持つクラスのインターフェース.
Definition: IPosition.h:11
範囲内で振動.
Definition: Motion.h:204
virtual double GetX() const =0
X座標を取得.
static double Get(double 最大値)
0~最大値の乱数を取得.
Definition: Rand.h:29
bool Update(IPosition *移動対象) override
Motion終了時はfalseを返す.
Definition: Motion.h:55
double GetX() const override
X座標を取得.
Definition: Point.h:63
void MoveA(double 距離, double 方向)
極座標で移動.
Definition: IPosition.h:41
Orbit(const TSpeed &角速度, double 半径X, double 半径Y, double 初期進行方向=0.0)
コンストラクタ.
Definition: Motion.h:176