Forms with mutable Area
form.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 #include <iostream>
5 #include <string>
6 #include <cmath>
7 
8 
11 class Point2D
12 {
13  public:
17  Point2D() : _x(0.0F), _y(0.0F) {}
18 
24  Point2D(float x, float y) : _x(x), _y(y) {}
25 
28  float GetX() const {return _x;}
29 
32  float GetY() const {return _y;}
33 
34 private:
35  float _x;
36  float _y;
37 };
38 
45 std::ostream& operator<<(std::ostream& s, const Point2D& rhs);
46 
53 inline float dist(const Point2D& a, const Point2D& b)
54 {
55  return std::sqrt( std::pow(a.GetX()-b.GetX(),2.0F) + std::pow(a.GetY()-b.GetY(),2.0F) );
56 }
57 
66 inline float crossZ(const Point2D& a, const Point2D& b)
67 {
68  return a.GetX()*b.GetY() - a.GetY()*b.GetX() ;
69 }
70 
71 
72 class Form // (nur Ergaenzen ist erlaubt)
73 {
74 public:
75 
76  Form(float x, float y) : _p(x,y) {}
77  Form(Form const&) = default;
78 
79  // Zugriff auf Mittelpunktskoordinaten
80  float GetX() const
81  {
82  return _p.GetX();
83  }
84  float GetY() const
85  {
86  return _p.GetY();
87  }
88  // String mit Klasseninfo
89  virtual std::string classname() const
90  {
91  return "geometrische Form";
92  }
93  // Berechnet die Flaeche des geometrischen Objektes
94  virtual float area() const = 0;
95 
96  virtual ~Form();
97 
98 private:
99  Point2D _p; // Mittelpunktskoordinaten
100 };
101 
102 // class Quadrat (definieren)
103 class Quadrat: public Form
104 {
105 public:
106  Quadrat(float x, float y, float seite) : Form(x,y), _seite(seite) {}
107  Quadrat(Quadrat const&) = default;
108 
109  std:: string classname() const override
110  {
111  return "Quadrat";
112  }
113  float area() const override
114  {
115  return _seite*_seite;
116  }
117 
118  ~Quadrat() override;
119 
120 private:
121  float _seite;
122 };
123 
124 // class Kreis (definieren)
125 class Kreis: public Form
126 {
127 public:
128  Kreis(float x, float y, float radius) : Form(x,y), _radius(radius) {}
129  Kreis(Kreis const&) = default;
130 
131 
132  std::string classname() const override
133  {
134  return "Kreis";
135  }
136  float area() const override
137  {
138  return M_PI*_radius*_radius;
139  }
140 
141  ~Kreis() override;
142 
143 private:
144  float _radius;
145 };
146 
147 // weitere Funktionen/Operatoren (was fehlt noch?)
148 
149 bool operator<(const Form &a, const Form &b);
150 
151 inline
152 float euclid_dist(const Form &a, const Form &b)
153 {
154  return std::sqrt( (b.GetX()-a.GetX())*(b.GetX()-a.GetX()) + (b.GetY()-a.GetY())*(b.GetY()-a.GetY()) );
155 }
156 
157 // via pointer arguments
158 bool kleiner(const Form *a, const Form *b);
159 
160 inline
161 float euclid_dist(const Form *a, const Form *b) // distance(iterator, iterator) exists already in STL !!
162 {
163  std::cout << "###";
164  return euclid_dist(*a, *b);
165 }
166 
167 
168 std::ostream& operator<<(std::ostream& s, const Form& rhs);
Definition: form.h:73
virtual float area() const =0
float GetX() const
Definition: form.h:80
Form(Form const &)=default
float GetY() const
Definition: form.h:84
virtual std::string classname() const
Definition: form.h:89
virtual ~Form()
Form(float x, float y)
Definition: form.h:76
Definition: form.h:126
std::string classname() const override
Definition: form.h:132
float area() const override
Definition: form.h:136
~Kreis() override
Kreis(float x, float y, float radius)
Definition: form.h:128
Kreis(Kreis const &)=default
Class containing a point in 2D.
Definition: form.h:12
Point2D(float x, float y)
Constructor.
Definition: form.h:24
Point2D()
Constructor without parameters. Defines the point to the origin (0.0).
Definition: form.h:17
float GetX() const
Getter.
Definition: form.h:28
float GetY() const
Getter.
Definition: form.h:32
Definition: form.h:104
float area() const override
Definition: form.h:113
std::string classname() const override
Definition: form.h:109
Quadrat(Quadrat const &)=default
Quadrat(float x, float y, float seite)
Definition: form.h:106
~Quadrat() override
float crossZ(const Point2D &a, const Point2D &b)
Calculates z-component of the cross product of two points in 2D.
Definition: form.h:66
float dist(const Point2D &a, const Point2D &b)
Calculates the Euclidian distance between two points in 2D.
Definition: form.h:53
bool kleiner(const Form *a, const Form *b)
Definition: form.cpp:15
bool operator<(const Form &a, const Form &b)
Definition: form.cpp:10
float euclid_dist(const Form &a, const Form &b)
Definition: form.h:152
std::ostream & operator<<(std::ostream &s, const Point2D &rhs)
Output operator for class Point2D.