Geometricpp  0.0.1.0
Biblioteca de geometria plana para o C++
Geometricpp.hpp
Ir para a documentação deste ficheiro.
1 
7 /*
8  * This program is free software: you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, either version 3 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program. If not, see <https://www.gnu.org/licenses/>.
20  */
21 
22 #ifndef GEOMETRICPP_HPP
23 #define GEOMETRICPP_HPP
24 
25 #include <iostream>
26 #include <cmath>
27 #include <stdexcept>
28 
29 #include <type_traits>
30 #include <utility>
31 
32 namespace Geometricpp
33 {
41  typedef double_t GEOMETRIC_SIDE;
42 
50  typedef double_t DIAGONAL;
51 
59  const double_t PI = 3.14159265358979323846;
60 
81  template <typename length>
82  typename std::enable_if<std::is_arithmetic<length>::value, length>::type
83  pitagoras_diagonais(length largest_diagonal, length smallest_diagonal)
84  {
85  if (largest_diagonal < smallest_diagonal)
86  {
87  throw std::invalid_argument("largest_diagonal parameter cannot be smaller than smallest_diagonal parameter");
88  }
89 
90  return sqrt((largest_diagonal / 2) * (largest_diagonal / 2) +
91  (smallest_diagonal / 2) * (smallest_diagonal / 2));
92  }
93 
102  template <typename T>
103  typename std::enable_if<std::is_arithmetic<T>::value, T>::type
104  pitagoras(T a, T b)
105  {
106  return std::sqrt(a * a + b * b);
107  }
108 
136  namespace Quadrilaterals
137  {
153  class Square
154  {
155  private:
156  GEOMETRIC_SIDE side_length;
157 
158  public:
168  Square(GEOMETRIC_SIDE side_length) : side_length(side_length) {};
169 
170  double_t size() const;
171 
172  double_t area() const;
173  double_t perimeter() const;
174  double_t diagonal() const;
175  };
176 
194  class Rectangle
195  {
196  private:
197  GEOMETRIC_SIDE height, width;
198 
199  public:
213  explicit Rectangle(GEOMETRIC_SIDE h, GEOMETRIC_SIDE w) : height(h), width(w)
214  {
215  if (height == width)
216  {
217  throw std::invalid_argument("Sides can't be equal, at least one needs to be different.");
218  }
219  }
220 
221  std::pair<Geometricpp::GEOMETRIC_SIDE, Geometricpp::GEOMETRIC_SIDE> size() const;
222 
223  double_t area() const;
224  double_t perimeter() const;
225  double_t diagonal() const;
226  };
227 
242  class Rhombus
243  {
244  private:
245  DIAGONAL diagonal_a, diagonal_b;
246 
247  public:
259  explicit Rhombus(double_t side, double_t angle)
260  {
261  double_t angle_radians = angle * PI / 180.0;
262 
263  diagonal_a = side * sqrt(2 * (1 + cos(angle_radians)));
264  diagonal_b = side * sqrt(2 * (1 - cos(angle_radians)));
265  }
266 
267  void show_diagonals() const;
268 
269  double_t area() const;
270  double_t perimeter() const;
271  double_t height() const;
272 
273  double_t inradius() const;
274  double_t circumradius() const;
275  };
276  };
277 
278  // TODO
279  // namespace Triangles
280  // {
281  // };
282 }
283 
284 #endif
double_t perimeter() const
Calcula o perímetro do retângulo.
Definition: Quadrilaterals.cpp:94
Rectangle(GEOMETRIC_SIDE h, GEOMETRIC_SIDE w)
Construtor para a classe Rectangle.
Definition: Geometricpp.hpp:213
std::pair< Geometricpp::GEOMETRIC_SIDE, Geometricpp::GEOMETRIC_SIDE > size() const
Retorna as dimensões do retângulo.
Definition: Quadrilaterals.cpp:68
double_t diagonal() const
Calcula o comprimento da diagonal do retângulo.
Definition: Quadrilaterals.cpp:107
double_t area() const
Calcula a área do retângulo.
Definition: Quadrilaterals.cpp:81
Representa um retângulo definido por dois lados (altura e largura).
Definition: Geometricpp.hpp:195
double_t perimeter() const
Calcula o perímetro do losango.
Definition: Quadrilaterals.cpp:135
void show_diagonals() const
Exibe as diagonais do losango.
Definition: Quadrilaterals.cpp:186
double_t area() const
Calcula a área do losango.
Definition: Quadrilaterals.cpp:121
Rhombus(double_t side, double_t angle)
Construtor para a classe Rhombus.
Definition: Geometricpp.hpp:259
double_t height() const
Calcula a altura do losango.
Definition: Quadrilaterals.cpp:150
double_t inradius() const
Calcula o raio da circunferência inscrita no losango.
Definition: Quadrilaterals.cpp:169
Classe que representa um losango e fornece métodos para calcular suas propriedades geométricas.
Definition: Geometricpp.hpp:243
double_t perimeter() const
Calcula o perímetro do quadrado.
Definition: Quadrilaterals.cpp:38
double_t area() const
Calcula a área do quadrado.
Definition: Quadrilaterals.cpp:25
Square(GEOMETRIC_SIDE side_length)
Construtor para a classe Square.
Definition: Geometricpp.hpp:168
double_t diagonal() const
Calcula o comprimento da diagonal do quadrado.
Definition: Quadrilaterals.cpp:52
double_t size() const
Retorna o tamanho do lado do quadrado.
Definition: Quadrilaterals.cpp:12
Representa um quadrado definido por um lado.
Definition: Geometricpp.hpp:154
std::enable_if< std::is_arithmetic< T >::value, T >::type pitagoras(T a, T b)
Calcula a hipotenusa de um triângulo retângulo usando o Teorema de Pitágoras.
Definition: Geometricpp.hpp:104
std::enable_if< std::is_arithmetic< length >::value, length >::type pitagoras_diagonais(length largest_diagonal, length smallest_diagonal)
Calcula a diagonal de um retângulo usando o teorema de Pitágoras.
Definition: Geometricpp.hpp:83
double_t DIAGONAL
Tipo definido para as diagonais de objetos geométricos.
Definition: Geometricpp.hpp:50
const double_t PI
Armazena o valor constante de PI.
Definition: Geometricpp.hpp:59
double_t GEOMETRIC_SIDE
Tipo definido para lados de objetos geométricos planos.
Definition: Geometricpp.hpp:41
Biblioteca de geometria plana para o C++.
Definition: Geometricpp.hpp:33
O namespace Quadrilaterals é responsável por agrupar as funções que realizam cálculos relacionados a ...