File: Rectangle.h

package info (click to toggle)
endless-sky 0.10.16-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 414,608 kB
  • sloc: cpp: 73,435; python: 893; xml: 666; sh: 271; makefile: 28
file content (76 lines) | stat: -rw-r--r-- 2,584 bytes parent folder | download
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
73
74
75
76
/* Rectangle.h
Copyright (c) 2016 by Michael Zahniser

Endless Sky is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version.

Endless Sky is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>.
*/

#pragma once

#include "Point.h"



// Class representing a rectangle.
class Rectangle {
public:
	// Construct a rectangle by specifying the two corners rather than the
	// center and the dimensions. The two corners need not be in any order.
	static Rectangle WithCorners(const Point &from, const Point &to);
	// Construct a rectangle beginning at the given point and having the given
	// dimensions (which are allowed to be negative).
	static Rectangle FromCorner(const Point &corner, const Point &dimensions);

	// Default constructor.
	Rectangle() = default;
	// Constructor, specifying the center and the dimensions.
	Rectangle(const Point &center, const Point &dimensions);
	// Copy constructor.
	Rectangle(const Rectangle &other) = default;

	// Assignment operator.
	Rectangle &operator=(const Rectangle &other) = default;

	// Translation operators.
	Rectangle operator+(const Point &offset) const;
	Rectangle &operator+=(const Point &offset);
	Rectangle operator-(const Point &offset) const;
	Rectangle &operator-=(const Point &offset);

	// Query the attributes of the rectangle.
	Point Center() const;
	Point Dimensions() const;
	double Width() const;
	double Height() const;
	double Left() const;
	double Top() const;
	double Right() const;
	double Bottom() const;
	Point TopLeft() const;
	Point TopRight() const;
	Point BottomLeft() const;
	Point BottomRight() const;

	// Check if a point is inside this rectangle.
	bool Contains(const Point &point) const;
	// Check if the given rectangle is inside this one. If one of its edges is
	// touching the edge of this one, that still counts.
	bool Contains(const Rectangle &other) const;
	// Check if the given rectangle overlaps with this one.
	bool Overlaps(const Rectangle &other) const;
	// Check if the given circle overlaps with this rectangle.
	bool Overlaps(const Point &center, double radius) const;


private:
	Point center;
	Point dimensions;
};