helloworld:algorithms:geometrie
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| helloworld:algorithms:geometrie [2020/09/26 01:47] – Création avc "" root | helloworld:algorithms:geometrie [2020/12/01 09:29] (Version actuelle) – Ajout de "Calculer la distance entre une ligne et un point" root | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | * Vérifier que 4 points forment un rectangle | + | ===Vérifier que 4 points forment un rectangle=== |
| On calcule la distance des 4 cotés. On vérifie que les distances sont les mêmes deux à deux. | On calcule la distance des 4 cotés. On vérifie que les distances sont les mêmes deux à deux. | ||
| Ligne 5: | Ligne 5: | ||
| On calcule la distance entre les points 1 et 3 et les points 2 et 4. La distance doit être la même. | On calcule la distance entre les points 1 et 3 et les points 2 et 4. La distance doit être la même. | ||
| - | [[https:// | + | [[https:// |
| + | |||
| + | ===Vérifier si un point est à l' | ||
| + | |||
| + | Attention, il ne faut pas que les lignes se coupent. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | [[http:// | ||
| + | |||
| + | ===Calculer une moyenne d' | ||
| + | |||
| + | On fait la moyenne des sinus et cosinus puis on calcul l' | ||
| + | |||
| + | $ | ||
| + | \bar s = \frac{1}{3} \left( \sin (355^\circ) + \sin (5^\circ) + \sin (15^\circ) \right) | ||
| + | = \frac{1}{3} \left( -0.087 + 0.087 + 0.259 \right) | ||
| + | \approx 0.086 | ||
| + | $ | ||
| + | |||
| + | $ | ||
| + | \bar c = \frac{1}{3} \left( | ||
| + | = \frac{1}{3} \left( 0.996 + 0.996 + 0.966 \right) | ||
| + | \approx 0.986 | ||
| + | $ | ||
| + | |||
| + | $ | ||
| + | \bar \theta = | ||
| + | \left. | ||
| + | \begin{align} | ||
| + | & \arctan \left( \frac{\bar s}{ \bar c} \right) & \bar s > 0 ,\ \bar c > 0 \\ | ||
| + | & \arctan \left( \frac{\bar s}{ \bar c} \right) + 180^\circ & \bar c < 0 \\ | ||
| + | & \arctan \left (\frac{\bar s}{\bar c} \right)+360^\circ & \bar s <0 ,\ \bar c >0 | ||
| + | \end{align} | ||
| + | \right\} | ||
| + | = \arctan \left( \frac{0.086}{0.986} \right) | ||
| + | = \arctan (0.087) = 5^\circ. | ||
| + | $ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===Calculer le point d' | ||
| + | |||
| + | <code python> | ||
| + | def line_intersection(line1, | ||
| + | xdiff = (line1[0][0] - line1[1][0], | ||
| + | ydiff = (line1[0][1] - line1[1][1], | ||
| + | |||
| + | def det(a, b): | ||
| + | return a[0] * b[1] - a[1] * b[0] | ||
| + | |||
| + | div = det(xdiff, ydiff) | ||
| + | if div == 0: | ||
| + | raise Exception(' | ||
| + | |||
| + | d = (det(*line1), | ||
| + | x = det(d, xdiff) / div | ||
| + | y = det(d, ydiff) / div | ||
| + | return x, y | ||
| + | |||
| + | print line_intersection(((x1, | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===Calculer le point d' | ||
| + | |||
| + | <code cpp> | ||
| + | constexpr bool is_segment_intersection(float p0_x, float p0_y, float p1_x, float p1_y, | ||
| + | float p2_x, float p2_y, float p3_x, float p3_y) | ||
| + | { | ||
| + | float s1_x = p1_x - p0_x; | ||
| + | float s1_y = p1_y - p0_y; | ||
| + | float s2_x = p3_x - p2_x; | ||
| + | float s2_y = p3_y - p2_y; | ||
| + | |||
| + | float div = -s2_x * s1_y + s1_x * s2_y; | ||
| + | if (div == 0.) | ||
| + | return false; | ||
| + | float s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / div; | ||
| + | float t = ( s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / div; | ||
| + | |||
| + | return s >= 0 && s <= 1 && t >= 0 && t <= 1; | ||
| + | |||
| + | // Point d' | ||
| + | // i_x = p0_x + (t * s1_x); | ||
| + | // i_y = p0_y + (t * s1_y); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===Calculer la droite perpendiculaire à une droite passant par un point=== | ||
| + | |||
| + | Le concept consiste à calculer le point sur la ligne d' | ||
| + | |||
| + | Soit (x1, y1) et (x2, y2) la droite et (x3, y3) le point en dehors de la droite. | ||
| + | |||
| + | La ligne perpendiculaire à (x1, y1) et (x2, y2) passant par (x3, y3) est la droite (x3, y3) et (x4, y4) | ||
| + | |||
| + | $k = ((y2-y1) * (x3-x1) - (x2-x1) * (y3-y1)) / ((y2-y1)^2 + (x2-x1)^2)$ | ||
| + | |||
| + | $x4 = x3 - k * (y2-y1)$ | ||
| + | |||
| + | $y4 = y3 + k * (x2-x1)$ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===Calculer la distance entre une ligne et un point=== | ||
| + | |||
| + | Soit (x0, y0) et (x1, y1) la droite et (x, y) le point en dehors de la droite. | ||
| + | |||
| + | $$\frac{|(y_0-y_1)x+(x_1-x_0)y+x_0 y_1-x_1 y_0|}{\sqrt{(x_1-x_0)^2+(y_1-y_0)^2}}$$ | ||
| + | |||
| + | [[https:// | ||
helloworld/algorithms/geometrie.1601077669.txt.gz · Dernière modification : de root
