SDXFrameWork  0.13
SDXFrameWork
 All Classes Namespaces Functions Variables Enumerations Enumerator Pages
Circle.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 
6 #include <Framework/IShape.h>
7 namespace SDX
8 {
9  class Complex;
10  class Point;
11  class Line;
12  class Circle;
13  class Rect;
14 
15  class Camera;
16  class Color;
17 
20  class Circle : public IShape
21  {
22  public:
23  double x;
24  double y;
25  double radius;
26 
28  Circle(double X座標, double Y座標, double 半径) :
29  x(X座標),
30  y(Y座標),
31  radius(半径)
32  {}
33 
34  IShape* Clone(double X座標, double Y座標) const override
35  {
36  auto shape = new Circle(X座標, Y座標, this->radius);
37  shape->zoomX = this->zoomX;
38  shape->zoomY = this->zoomY;
39  return shape;
40  }
41 
42  void SetPos(double X座標, double Y座標) override
43  {
44  this->x = X座標;
45  this->y = Y座標;
46  }
47 
48  void MultiZoom(double 倍率X, double 倍率Y) override
49  {
50  this->radius *= 倍率X;
51 
52  zoomX *= 倍率X;
53  zoomY *= 倍率Y;
54  }
55 
56  void Rotate(double 回転する角度) override
57  {
58  }
59 
60  void Move(double X移動量, double Y移動量) override
61  {
62  this->x += X移動量;
63  this->y += Y移動量;
64  }
65 
66  double GetX() const override
67  {
68  return int(x);
69  }
70 
71  double GetY() const override
72  {
73  return int(y);
74  }
75 
76  double GetW() const override
77  {
78  return int(radius * 2);
79  }
80 
81  double GetH() const override
82  {
83  return int(radius * 2);
84  }
85 
86  void Draw(const Color &描画色) const override;
87 
88  bool Hit(const IShape *shape) const override
89  {
90  return shape->Hit(this);
91  }
92  bool Hit(const Complex *complex) const override
93  {
94  for (auto it : complex->shapes)
95  {
96  if (it->Hit(this)) return true;
97  }
98  return false;
99  }
100  bool Hit(const Point *point) const override
101  {
102  return
103  (
104  (point->x - this->x) * (point->x - this->x) + (point->y - this->y) * (point->y - this->y)
105  <=
106  (this->radius * this->radius)
107  );
108  }
109  bool Hit(const Line *line) const override
110  {
111  return line->LinePoint(x, y, (line->GetThickHarf() + radius));
112  }
113  bool Hit(const Circle *circle) const override
114  {
115  return
116  (
117  (this->x - circle->x) * (this->x - circle->x) + (this->y - circle->y) * (this->y - circle->y)
118  <=
119  (this->radius + circle->radius) * (this->radius + circle->radius)
120  );
121  }
122  bool Hit(const Rect *rect) const override
123  {
124  return
125  (
126  (
127  (
128  (
129  this->x + this->radius >= rect->GetLeft()
130  ) && (
131  this->x - this->radius <= rect->GetRight()
132  )
133  ) && (
134  (
135  this->y >= rect->GetTop()
136  ) && (
137  this->y <= rect->GetBottom()
138  )
139  )
140  ) || (
141  (
142  (
143  this->x >= rect->GetLeft()
144  ) && (
145  this->x <= rect->GetRight()
146  )
147  ) && (
148  (
149  this->y + this->radius >= rect->GetTop()
150  ) && (
151  this->y - this->radius <= rect->GetBottom()
152  )
153  )
154  ) || (//四角形の四隅と円の判定
155  (this->x - rect->GetLeft()) * (this->x - rect->GetLeft()) + (this->y - rect->GetTop()) * (this->y - rect->GetTop()) <= (this->radius * this->radius)
156  ) || (
157  (this->x - rect->GetRight()) * (this->x - rect->GetRight()) + (this->y - rect->GetTop()) * (this->y - rect->GetTop()) <= (this->radius * this->radius)
158  ) || (
159  (this->x - rect->GetLeft()) * (this->x - rect->GetLeft()) + (this->y - rect->GetBottom()) * (this->y - rect->GetBottom()) <= (this->radius * this->radius)
160  ) || (
161  (this->x - rect->GetRight()) * (this->x - rect->GetRight()) + (this->y - rect->GetBottom()) * (this->y - rect->GetBottom()) <= (this->radius * this->radius)
162  )
163  );
164  }
165  };
166 }
double GetThickHarf() const
太さの半分を取得.
Definition: Line.h:208
矩形を表す図形クラス.
Definition: Rect.h:22
double y
座標
Definition: Point.h:26
void Draw(const Color &描画色) const override
描画する.
Definition: ShapeDraw.h:38
太さのある線を表す図形クラス.
Definition: Line.h:20
double GetBottom() const
下端のY座標を取得.
Definition: Rect.h:136
double GetX() const override
X座標を取得.
Definition: Circle.h:66
IShape * Clone(double X座標, double Y座標) const override
同じ形の図形を作る.
Definition: Circle.h:34
double GetTop() const
上端のY座標を取得.
Definition: Rect.h:124
double GetRight() const
右端のX座標を取得.
Definition: Rect.h:130
bool Hit(const Line *line) const override
衝突判定.
Definition: Circle.h:109
double GetLeft() const
左端のX座標を取得.
Definition: Rect.h:118
bool Hit(const Rect *rect) const override
衝突判定.
Definition: Circle.h:122
std::vector< IShape * > shapes
保持するShape
Definition: Complex.h:23
double x
座標
Definition: Circle.h:23
点を表す図形クラス.
Definition: Point.h:22
void Move(double X移動量, double Y移動量) override
相対座標で移動.
Definition: Circle.h:60
衝突判定可能な図形の抽象クラス.
Definition: IShape.h:21
virtual bool Hit(const IShape *iShape) const =0
衝突判定.
double y
座標
Definition: Circle.h:24
複合図形を表すクラス.
Definition: Complex.h:20
bool Hit(const Point *point) const override
衝突判定.
Definition: Circle.h:100
double GetY() const override
Y座標を取得.
Definition: Circle.h:71
色を表すクラス.
Definition: Color.h:11
bool Hit(const Circle *circle) const override
衝突判定.
Definition: Circle.h:113
void MultiZoom(double 倍率X, double 倍率Y) override
縦横別で拡大率を掛け算する.
Definition: Circle.h:48
double GetH() const override
高さを取得.
Definition: Circle.h:81
bool Hit(const IShape *shape) const override
衝突判定.
Definition: Circle.h:88
void SetPos(double X座標, double Y座標) override
指定座標に移動.
Definition: Circle.h:42
double zoomX
図形の拡大率
Definition: IPosition.h:14
double x
座標
Definition: Point.h:25
double GetW() const override
幅を取得.
Definition: Circle.h:76
bool LinePoint(double px, double py, double range) const
線と点の当たり判定.
Definition: Line.h:291
Circle(double X座標, double Y座標, double 半径)
コンストラクタ.
Definition: Circle.h:28
円を表す図形クラス.
Definition: Circle.h:20
double zoomY
図形の拡大率
Definition: IPosition.h:15
bool Hit(const Complex *complex) const override
衝突判定.
Definition: Circle.h:92
double radius
半径
Definition: Circle.h:25
void Rotate(double 回転する角度) override
回転する.
Definition: Circle.h:56