-
Notifications
You must be signed in to change notification settings - Fork 0
/
Ball.cpp
72 lines (64 loc) · 2.19 KB
/
Ball.cpp
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "Ball.hpp"
#include <cmath>
Ball::Ball(const Point& center, double radius, const Velocity& velocity,
const Color& color, bool collidable)
: center(center), radius(radius), velocity(velocity), color(color),
collidable(collidable) {}
/**
* Задает скорость объекта
* @param velocity новое значение скорости
*/
void Ball::setVelocity(const Velocity& velocity) {
this->velocity = velocity;
}
/**
* @return скорость объекта
*/
Velocity Ball::getVelocity() const {
return velocity;
}
/**
* @brief Выполняет отрисовку объекта
* @details объект Ball абстрагирован от конкретного
* способа отображения пикселей на экране. Он "знаком"
* лишь с интерфейсом, который предоставляет Painter
* Рисование выполняется путем вызова painter.draw(...)
* @param painter контекст отрисовки
*/
void Ball::draw(Painter& painter) const {
painter.draw(center, radius, color);
}
/**
* Задает координаты центра объекта
* @param center новый центр объекта
*/
void Ball::setCenter(const Point& center) {
this->center = center;
}
/**
* @return центр объекта
*/
Point Ball::getCenter() const {
return this->center;
}
/**
* @brief Возвращает радиус объекта
* @details обратите внимание, что метод setRadius()
* не требуется
*/
double Ball::getRadius() const {
return this->radius;
}
/**
* @brief Возвращает массу объекта
* @details В нашем приложении считаем, что все шары
* состоят из одинакового материала с фиксированной
* плотностью. В этом случае масса в условных единицах
* эквивалентна объему: PI * radius^3 * 4. / 3.
*/
double Ball::getMass() const {
return M_PI * pow(radius, 3) * 4. / 3.;
}
bool Ball::checkCollidable() const {
return this->collidable;
}