-
Notifications
You must be signed in to change notification settings - Fork 0
/
Ball.h
48 lines (43 loc) · 1010 Bytes
/
Ball.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#pragma once
#ifndef BALL
#define BALL
#include "engine/Atom.h"
/**
* 球的运动计算
*/
class Ball: public Engine::Atom {
private:
number mR; //半径
Engine::Rect mRect; //圆所在的矩形
public:
Ball(number r = 10) {
this->r(r);
}
void r(number r) {
mR = r;
}
number r() const {
return mR;
}
const Engine::Rect& rect() {
number R = mR+mR;
mRect.width(R);
mRect.height(R);
mRect.position().set(position());
mRect.position().translate(-mR, -mR);
return mRect;
}
Engine::Vector collision(const Engine::Rect& rect) {
if(!this->rect().collision(rect)) return Engine::Vector();
Engine::Vector vector = rect.toNearPoint(position());
if(vector.x() * vector.x() + vector.y() * vector.y() > r()*r()) {
vector.set(0,0);
}
return vector;
}
void reflection(const Engine::Vector& vector) {
if(vector.isZero()) return;
v().reflectionThis(vector);
}
};
#endif