-
Notifications
You must be signed in to change notification settings - Fork 0
/
point.cpp
63 lines (51 loc) · 1.59 KB
/
point.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
/*
INF3105 -- Structures de données et algorithmes
UQAM | Département d'informatique
Automne 2019 | TP1 | point.cpp
*/
#include <assert.h>
#include <math.h>
#include "point.h"
Point::Point(const Point& point) : x(point.x), y(point.y) {}
Point::Point(double _x, double _y) : x(_x), y(_y) {}
double Point::distance(const Point& point1, const Point& point2) const {
//Algorithme donné dans le sujet
double ratio = (this->x - point1.x) * (point2.x - point1.x) + (this->y - point1.y) * (point2.y - point1.y);
ratio /= (pow(point2.x - point1.x, 2) + pow(point2.y - point1.y, 2));
if (ratio > 1)
ratio = 1;
else if (ratio < 0)
ratio = 0;
double x = ratio * (point2.x - point1.x);
double y = ratio * (point2.y - point1.y);
Point v(x, y);
x = point1.x + v.x;
y = point1.y + v.y;
Point p(x, y);
return sqrt(pow(p.x - this->x, 2) + pow(p.y - this->y, 2));
}
double Point::calculAir(const Point& point) const {
/*retourne le produit de :
la somme de l'abscisse du point implicite et de l'abscisse de param1
avec
la différence entre l'ordonnée du point implicite et l'ordonnée de param1
source : http://www.mathopenref.com/coordpolygonarea2.html */
return (point.x + this->x) * (point.y - this->y);
}
//Pour écire un point
std::ostream& operator<<(std::ostream& os, const Point& point) {
os << "(" << point.x << "," << point.y << ")";
return os;
}
//Pour lire un point
std::istream& operator>>(std::istream& is, Point& point) {
char po, vir, pf;
is >> po;
if (is) {
is >> point.x >> vir >> point.y >> pf;
assert(po=='(');
assert(vir==',');
assert(pf==')');
}
return is;
}