SDXFrameWork  0.13
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
IPosition.h
1 //Copyright © 2014 SDXFramework
2 //[License]GNU Affero General Public License, version 3
3 //[Contact]http://sourceforge.jp/projects/dxframework/
4 #pragma once
5 #include <algorithm>
6 #include <cmath>
7 
8 namespace SDX
9 {
11  class IPosition
12  {
13  protected:
14  double zoomX = 1;
15  double zoomY = 1;
16  public:
17  virtual ~IPosition() = default;
18 
20  virtual void SetPos(double X座標, double Y座標) = 0;
21 
23  virtual void MultiZoom(double X倍率, double Y倍率) = 0;
24 
26  void SetZoom(double X拡大率, double Y拡大率)
27  {
28  MultiZoom(X拡大率 / zoomX, Y拡大率 / zoomY);
29  }
30 
32  void MultiZoom(double 倍率)
33  {
34  MultiZoom(倍率, 倍率);
35  }
36 
38  virtual void Move(double X移動量, double Y移動量) = 0;
39 
41  void MoveA(double 距離, double 方向)
42  {
43  Move(距離 * std::cos(方向), 距離 * std::sin(方向));
44  }
45 
47  void MoveF(double 距離)
48  {
49  MoveA(距離 , GetAngle() );
50  }
51 
53  virtual void Rotate(double 回転する角度) = 0;
54 
56  virtual double GetAngle() const
57  {
58  return 0;
59  }
60 
62  void SetAngle(double 指定角度)
63  {
64  Rotate(指定角度 - GetAngle());
65  }
66 
68  double GetDirect(IPosition* 比較対象) const
69  {
70  return std::atan2( 比較対象->GetY() - this->GetY() , 比較対象->GetX() - this->GetX());
71  }
72 
74  double GetDistance(const IPosition* 比較対象) const
75  {
76  const double xd = this->GetX() - 比較対象->GetX();
77  const double yd = this->GetY() - 比較対象->GetY();
78 
79  return std::sqrt(xd * xd + yd * yd);
80  }
81 
83  virtual double GetX() const = 0;
84 
86  virtual double GetY() const = 0;
87 
89  virtual double GetW() const = 0;
90 
92  virtual double GetH() const = 0;
93  };
94 }
virtual double GetAngle() const
角度を取得する.
Definition: IPosition.h:56
void SetZoom(double X拡大率, double Y拡大率)
拡大率を設定.
Definition: IPosition.h:26
void MultiZoom(double 倍率)
拡大率を掛け算する.
Definition: IPosition.h:32
virtual double GetW() const =0
幅を取得.
virtual double GetH() const =0
高さを取得.
void SetAngle(double 指定角度)
角度を指定する.
Definition: IPosition.h:62
virtual void MultiZoom(double X倍率, double Y倍率)=0
縦横別で拡大率を掛け算する.
virtual void Rotate(double 回転する角度)=0
回転する.
virtual double GetY() const =0
Y座標を取得.
virtual void Move(double X移動量, double Y移動量)=0
相対座標で移動.
void MoveF(double 距離)
前方に移動.
Definition: IPosition.h:47
double GetDistance(const IPosition *比較対象) const
対象との相対座標を取得.
Definition: IPosition.h:74
double zoomX
図形の拡大率
Definition: IPosition.h:14
virtual void SetPos(double X座標, double Y座標)=0
指定座標に移動.
位置と方向を持つクラスのインターフェース.
Definition: IPosition.h:11
virtual double GetX() const =0
X座標を取得.
double zoomY
図形の拡大率
Definition: IPosition.h:15
double GetDirect(IPosition *比較対象) const
対象との角度を取得.
Definition: IPosition.h:68
void MoveA(double 距離, double 方向)
極座標で移動.
Definition: IPosition.h:41