This repository has been archived by the owner on Jan 19, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgeom2d.h
127 lines (68 loc) · 2.38 KB
/
geom2d.h
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#ifndef _GEOM2D_H_
#define _GEOM2D_H_
#include <stdbool.h>
typedef struct Vecteur_ {
double x, y;
} Vecteur;
typedef struct Point_ {
double x, y;
} Point;
typedef struct Bezier2_ {
Point c0, c1, c2;
} Bezier2;
typedef struct Bezier3_ {
Point c0, c1, c2, c3;
} Bezier3;
/**
* Renvoie `true` si `d1` et `d2` peuvent être considérés comme égaux en tenant compte de la précision approximative des
* nombres flottants.
*/
bool egaux_doubles(double d1, double d2);
// Points
Point set_point(double x, double y);
Point add_point(Point p1, Point p2);
Point mul_reel_point(Point p, double a);
double distance(Point p1, Point p2);
bool egaux_points(Point p1, Point p2);
// Vecteurs
Vecteur set_vecteur(double x, double y);
Vecteur add_vecteur(Vecteur v1, Vecteur v2);
Vecteur mul_reel_vecteur(Vecteur v, double a);
Vecteur vect_bipoint(Point a, Point b);
double produit_scalaire(Vecteur v1, Vecteur v2);
double norme(Vecteur v);
bool egaux_vecteurs(Vecteur v1, Vecteur v2);
// Distance point-segment
double distance_point_segment(Point segment_a, Point segment_b, Point p);
// Courbes de bezier
/**
* Calcule C(t) où C est une courbe de Bézier de degré 2 passée en premier paramètre
*/
Point bezier2_C(Bezier2* self, double t);
/**
* Approxime une distance entre le point `self`(`t`) et le point `p`, où `self` est une courbe de Bézier de degré 2.
*/
double distance_point_bezier2(Bezier2* self, Point p, double t);
/**
* Calcule C(t) où C est une courbe de Bézier de degré 3 passée en premier paramètre
*/
Point bezier3_C(Bezier3* self, double t);
/**
* Approxime une distance entre le point `self`(`t`) et le point `p`, où `self` est une courbe de Bézier de degré 3.
*/
double distance_point_bezier3(Bezier3* self, Point p, double t);
/**
* Incrémente le degré d'une courbe de Bezier de degré 2
*/
Bezier3 bezier2_to_bezier3(Bezier2* self);
/**
* Approxime la séquence de points start[0]..start[len-1] par une courbe de Bézier de degré 2 dont les points de
* contrôle extrêmes sont le début et la fin de la séquence.
*/
Bezier2 approx_bezier2(Point* start, unsigned int len);
/**
* Approxime la séquence de points start[0]..start[len-1] par une courbe de Bézier de degré 3 dont les points de
* contrôle extrêmes sont le début et la fin de la séquence.
*/
Bezier3 approx_bezier3(Point* start, unsigned int len);
#endif