Un petit challenge pour un codeur-motard (ou l'inverse)

classic Classic list List threaded Threaded
10 messages Options
Reply | Threaded
Open this post in threaded view
|

Un petit challenge pour un codeur-motard (ou l'inverse)

cquest
Un petit outil pour analyser un GPX, et le compléter par des POI sur les virages...

C'est ici: http://forum.openstreetmap.fr/viewtopic.php?f=3&t=1443

--
Christian Quest - OpenStreetMap France

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Christian Quest - cquest@openstreetmap.fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

FrViPofm
Le 03/09/2014 00:13, Christian Quest a écrit :
> Un petit outil pour analyser un GPX, et le compléter par des POI sur
> les virages...
>
> C'est ici: http://forum.openstreetmap.fr/viewtopic.php?f=3&t=1443
Hum... Intéressant mais contrairement à ce qui est dit sur le forum, je
ne crois pas que ça soit si simple.
Je ne suis pas matheux, mais...
Compter les virages, ça va. Calculer les rayons de courbure, ça va
dépendre de la qualité du tracé.

Un exemple :

  .
  .
  .
  |
  |
  x-------.....
Il y a un virage. Mais quelle courbure ?
Autre exemple (la route qui croise la voie ferrée)

...-----x
          \
           x-----...
Il y a deux virages repérables, mais quelle courbure ?
Il faut au moins trois points pour marquer un virage dont on pourra
calculer le rayon de courbure. Avec deux points (angle cassé) il me
semble que ça ne suffit pas.
Voir aussi le cas de deux virages successifs du même côté : il faut
repérer deux minima de rayon de courbure distincts.

Je crois aussi que la variation d'azimut entre l'entrée et la sortie du
virage est un critère important pour sa "force" : une épingle à cheveux,
c'est un rayon court mais aussi 180° de variation d'azimut.

Intéressant à suivre...
sur dev, peut-être...
--
FrViPofm
FrViPofm

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

Art Penteur
Dans le cas que tu présentes, tu as bien trois points : les lignes que
tu traces et qui partent loin sont bien accrochées à un point, quelque
part.
Donc à chaque angle que tu vois, tu peux bien définir le point "du
virage", le point avant, le point après.

Reste la question du calcul du rayon de courbure.
La méthode de base consiste à trouver le centre du cercle passant par
les trois points. On le trouve à l'intersection des médiatrices des
deux segments avant/après. Puis il suffit de calculer la distance
entre ce centre et le point.
Sur des points très irrégulièrement espacés, je ne sais pas ce que
cette méthode peut donner.

Il est aussi possible de calculer la parabole qui passe par les trois
points, puis d'appliquer des formules analytique (en dérivée seconde,
...) sur cette parabole. Il est possible que ça donne de meilleurs
résultats.

Bon courage. Je relève les copies dans une heure. D'ici là, je
surveille que vous ne copiez pas sur le voisin, ni sur Internet.

Art.



Le 3 septembre 2014 01:05, Vincent Pottier <[hidden email]> a écrit :

> Le 03/09/2014 00:13, Christian Quest a écrit :
>
>> Un petit outil pour analyser un GPX, et le compléter par des POI sur les
>> virages...
>>
>> C'est ici: http://forum.openstreetmap.fr/viewtopic.php?f=3&t=1443
>
> Hum... Intéressant mais contrairement à ce qui est dit sur le forum, je ne
> crois pas que ça soit si simple.
> Je ne suis pas matheux, mais...
> Compter les virages, ça va. Calculer les rayons de courbure, ça va dépendre
> de la qualité du tracé.
>
> Un exemple :
>
>  .
>  .
>  .
>  |
>  |
>  x-------.....
> Il y a un virage. Mais quelle courbure ?
> Autre exemple (la route qui croise la voie ferrée)
>
> ...-----x
>          \
>           x-----...
> Il y a deux virages repérables, mais quelle courbure ?
> Il faut au moins trois points pour marquer un virage dont on pourra calculer
> le rayon de courbure. Avec deux points (angle cassé) il me semble que ça ne
> suffit pas.
> Voir aussi le cas de deux virages successifs du même côté : il faut repérer
> deux minima de rayon de courbure distincts.
>
> Je crois aussi que la variation d'azimut entre l'entrée et la sortie du
> virage est un critère important pour sa "force" : une épingle à cheveux,
> c'est un rayon court mais aussi 180° de variation d'azimut.
>
> Intéressant à suivre...
> sur dev, peut-être...
> --
> FrViPofm
> FrViPofm
>
> _______________________________________________
> Talk-fr mailing list
> [hidden email]
> https://lists.openstreetmap.org/listinfo/talk-fr

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

Christophe Merlet (RedFox)
Le 03/09/2014 06:29, Art Penteur a écrit :

> Dans le cas que tu présentes, tu as bien trois points : les lignes que
> tu traces et qui partent loin sont bien accrochées à un point, quelque
> part.
> Donc à chaque angle que tu vois, tu peux bien définir le point "du
> virage", le point avant, le point après.
>
> Reste la question du calcul du rayon de courbure.
> La méthode de base consiste à trouver le centre du cercle passant par
> les trois points. On le trouve à l'intersection des médiatrices des
> deux segments avant/après. Puis il suffit de calculer la distance
> entre ce centre et le point.
> Sur des points très irrégulièrement espacés, je ne sais pas ce que
> cette méthode peut donner.
>
> Il est aussi possible de calculer la parabole qui passe par les trois
> points, puis d'appliquer des formules analytique (en dérivée seconde,
> ...) sur cette parabole. Il est possible que ça donne de meilleurs
> résultats.
>
> Bon courage. Je relève les copies dans une heure. D'ici là, je
> surveille que vous ne copiez pas sur le voisin, ni sur Internet.

D'après moi, il suffit de charger la trace GPX.
De la simplifier à 1m
Ensuite on calcule l'angle de tous les 3 points consécutifs de la trace
On fait la somme des angles positifs consécutifs et des angles négatifs
consécutifs et si la somme dépasse un certain seuil (par ex 30°) alors
on a un virage.

Le total donnerait une bonne approximation du nb de virage total.



> Art.
>
>
>
> Le 3 septembre 2014 01:05, Vincent Pottier <[hidden email]> a écrit :
>> Le 03/09/2014 00:13, Christian Quest a écrit :
>>
>>> Un petit outil pour analyser un GPX, et le compléter par des POI sur les
>>> virages...
>>>
>>> C'est ici: http://forum.openstreetmap.fr/viewtopic.php?f=3&t=1443
>>
>> Hum... Intéressant mais contrairement à ce qui est dit sur le forum, je ne
>> crois pas que ça soit si simple.
>> Je ne suis pas matheux, mais...
>> Compter les virages, ça va. Calculer les rayons de courbure, ça va dépendre
>> de la qualité du tracé.
>>
>> Un exemple :
>>
>>  .
>>  .
>>  .
>>  |
>>  |
>>  x-------.....
>> Il y a un virage. Mais quelle courbure ?
>> Autre exemple (la route qui croise la voie ferrée)
>>
>> ...-----x
>>          \
>>           x-----...
>> Il y a deux virages repérables, mais quelle courbure ?
>> Il faut au moins trois points pour marquer un virage dont on pourra calculer
>> le rayon de courbure. Avec deux points (angle cassé) il me semble que ça ne
>> suffit pas.
>> Voir aussi le cas de deux virages successifs du même côté : il faut repérer
>> deux minima de rayon de courbure distincts.
>>
>> Je crois aussi que la variation d'azimut entre l'entrée et la sortie du
>> virage est un critère important pour sa "force" : une épingle à cheveux,
>> c'est un rayon court mais aussi 180° de variation d'azimut.
>>
>> Intéressant à suivre...
>> sur dev, peut-être...
>> --
>> FrViPofm
>> FrViPofm
>>
>> _______________________________________________
>> Talk-fr mailing list
>> [hidden email]
>> https://lists.openstreetmap.org/listinfo/talk-fr
>
> _______________________________________________
> Talk-fr mailing list
> [hidden email]
> https://lists.openstreetmap.org/listinfo/talk-fr
>


--
Christophe Merlet (RedFox)

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

Guilhem Bonnefille
In reply to this post by FrViPofm
Le 3 septembre 2014 01:05, Vincent Pottier <[hidden email]> a écrit :

> Le 03/09/2014 00:13, Christian Quest a écrit :
>
>> Un petit outil pour analyser un GPX, et le compléter par des POI sur les
>> virages...
>>
>> C'est ici: http://forum.openstreetmap.fr/viewtopic.php?f=3&t=1443
>
> Hum... Intéressant mais contrairement à ce qui est dit sur le forum, je ne
> crois pas que ça soit si simple.
> Je ne suis pas matheux, mais...
> Compter les virages, ça va. Calculer les rayons de courbure, ça va dépendre
> de la qualité du tracé.
>
> Un exemple :
>
>  .
>  .
>  .
>  |
>  |
>  x-------.....
> Il y a un virage. Mais quelle courbure ?
> Autre exemple (la route qui croise la voie ferrée)
>
> ...-----x
>          \
>           x-----...
> Il y a deux virages repérables, mais quelle courbure ?
> Il faut au moins trois points pour marquer un virage dont on pourra calculer
> le rayon de courbure. Avec deux points (angle cassé) il me semble que ça ne
> suffit pas.
> Voir aussi le cas de deux virages successifs du même côté : il faut repérer
> deux minima de rayon de courbure distincts.
>
> Je crois aussi que la variation d'azimut entre l'entrée et la sortie du
> virage est un critère important pour sa "force" : une épingle à cheveux,
> c'est un rayon court mais aussi 180° de variation d'azimut.
>
> Intéressant à suivre...
> sur dev, peut-être...

Et pourquoi pas un tag :
virage=slow
virage=gaz
virage=gaz-gaz

;-)
--
Guilhem BONNEFILLE
-=- JID: [hidden email] MSN: [hidden email]
-=- mailto:[hidden email]
-=- http://nathguil.free.fr/

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

FrViPofm
In reply to this post by Art Penteur
Le 03/09/2014 06:29, Art Penteur a écrit :
> Dans le cas que tu présentes, tu as bien trois points : les lignes que
> tu traces et qui partent loin sont bien accrochées à un point, quelque
> part.
> Donc à chaque angle que tu vois, tu peux bien définir le point "du
> virage", le point avant, le point après.
Oui, oui, je sais bien. C'est à dessein qu'il n'y avait qu'un point sur
le dessin.
>
> Reste la question du calcul du rayon de courbure.
> La méthode de base consiste à trouver le centre du cercle passant par
> les trois points. On le trouve à l'intersection des médiatrices des
> deux segments avant/après. Puis il suffit de calculer la distance
> entre ce centre et le point.
> Sur des points très irrégulièrement espacés, je ne sais pas ce que
> cette méthode peut donner.
D'où mon premier schéma. Si le premier point, avant le virage, et le
dernier, après, sont derrière l'horizon et que les segments traversent
les plaines du Nevada sur des kilomètres avant de contourner la cabane
drugstore, le calcul de courbure, quelque soit la courbe, cercle,
parabole, clothoïde, ne donnera rien de pertinent hormis la variation
d'azimut.
> Il est aussi possible de calculer la parabole qui passe par les trois
> points, puis d'appliquer des formules analytique (en dérivée seconde,
> ...) sur cette parabole. Il est possible que ça donne de meilleurs
> résultats.
>
> Bon courage. Je relève les copies dans une heure. D'ici là, je
> surveille que vous ne copiez pas sur le voisin, ni sur Internet.
Dommage :
https://fr.wikipedia.org/wiki/Trac%C3%A9_en_plan_%28route%29
--
FrViPofm


_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

Art Penteur


Le 3 sept. 2014 14:11, "Vincent Pottier" <[hidden email]> a écrit :
>
[...]
> D'où mon premier schéma. Si le premier point, avant le virage, et le dernier, après, sont derrière l'horizon et que les segments traversent les plaines du Nevada sur des kilomètres avant de contourner la cabane drugstore, le calcul de courbure, quelque soit la courbe, cercle, parabole, clothoïde, ne donnera rien de pertinent hormis la variation d'azimut.
>
De façon très naïve, je pense que si j'avais à coder, sur ce cas je créerais un point fictif sur la ligne droite, à la même distance que celle jusqu'au point suivant, et je m'appuierais sur ce point pour les calculs de rayon.

J'imagine que les "pros" font plutôt une approximation d'un tracé au milieu des points (spline ou autre), et calculent analytiquement le rayon sur cette courbe.

Art.


_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

verdy_p
In reply to this post by FrViPofm
Le 3 septembre 2014 14:08, Vincent Pottier <[hidden email]> a écrit :
Le 03/09/2014 06:29, Art Penteur a écrit :
Sur des points très irrégulièrement espacés, je ne sais pas ce que
cette méthode peut donner.
D'où mon premier schéma. Si le premier point, avant le virage, et le dernier, après, sont derrière l'horizon et que les segments traversent les plaines du Nevada sur des kilomètres avant de contourner la cabane drugstore, le calcul de courbure, quelque soit la courbe, cercle, parabole, clothoïde, ne donnera rien de pertinent hormis la variation d'azimut.

Les cercles c'est juste pour les rond-points (et encore... pas tous car certains sont ovoïdes).

Pour le reste le meilleur tracé c'est la chaînette (pas le clothoïde) qui correspond à un équilibre des forces et simule mieux le comportement au volant pour la prise de virages.


Courbe transcendantale qu'on peut confondre à tord avec une parabole (la parabole n'est valable qu'avec une seule force dont l'orientation est fixe, comme le poid, la chaînette ajoute les forces de tension ou compression longitudinale qui "élargissent" la bosse de la parabole entre ses deux points de tension fixes aux extrémités).

Cette courbe est un cosinus hyperbolique.

Si on ajoute une contrainte angulaire aux extrémités (telle que les tangentes afin d'éliminer les angles aux extrémités avec les arcs suivants de chaque coté), on obtient une Bézier, bien plus facile à calculer que la chaînette (c'est la forme de la règle souple métallique qu'on fixe en certains points par des contraintes de placement.

Deux types de Bézier: quadratique pour la plus simple ou cubique pour un meilleur résultat. La vraie Bézier physique a un degré infini mais en pratique on s'arrêt au degré 3 qui suffit largement au delà la précision des virages de routes tombe à moins de 10 centimètres dans tous les cas pratique pour des déviations angulaire totale de l'arc inférieure à 45 degrés et une route d'une largeur voisine de 7 à 10 mètres, et une longueur totale de l'arc inférieure à 100 mètres (sinon il suffit ajouter quelques noeuds et tracer des sous-arcs, mais sur une trace GPS, 100 mètres c'est déjà beaucoup et on a en principe deux ou tris points intermédiaires pour une relevé correct; sinon la trace n'est pas utilisable).
.

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

FrViPofm
Marrant !
Un géomètre en retraite m'avait parlé de clothoïde, le voisin, qui bosse à la DDE (pardon, on ne dit plus DDE) aussi. Et je retrouve cette même clothoïde sur wikipédia [1].
Heureusement que Philippe est là pour nous dire la véritable vérité vraie sur comment sont tracées les routes.

Dans son imagination, je suppose.
Parce que là [2] ou là [3], je ne vois pas de chaînette mais des cercles et des clothoïdes.

Dis, Philippe. Elle fait comment la chaînette, un virage de 270°, courant dans un échangeur ? La limite d'une chaînette, c'est pas 180° ?

[1] https://fr.wikipedia.org/wiki/Trac%C3%A9_en_plan_%28route%29
[2] http://osm.org/go/0A_iMpEU
[3] http://osm.org/go/0AuEEiDV-- http://osm.org/go/0DF9YZTE
--
FrViPofm

Le 03/09/2014 16:03, Philippe Verdy a écrit :


Les cercles c'est juste pour les rond-points (et encore... pas tous car certains sont ovoïdes).

Pour le reste le meilleur tracé c'est la chaînette (pas le clothoïde) qui correspond à un équilibre des forces et simule mieux le comportement au volant pour la prise de virages.


Courbe transcendantale qu'on peut confondre à tord avec une parabole (la parabole n'est valable qu'avec une seule force dont l'orientation est fixe, comme le poid, la chaînette ajoute les forces de tension ou compression longitudinale qui "élargissent" la bosse de la parabole entre ses deux points de tension fixes aux extrémités).

Cette courbe est un cosinus hyperbolique.

Si on ajoute une contrainte angulaire aux extrémités (telle que les tangentes afin d'éliminer les angles aux extrémités avec les arcs suivants de chaque coté), on obtient une Bézier, bien plus facile à calculer que la chaînette (c'est la forme de la règle souple métallique qu'on fixe en certains points par des contraintes de placement.

Deux types de Bézier: quadratique pour la plus simple ou cubique pour un meilleur résultat. La vraie Bézier physique a un degré infini mais en pratique on s'arrêt au degré 3 qui suffit largement au delà la précision des virages de routes tombe à moins de 10 centimètres dans tous les cas pratique pour des déviations angulaire totale de l'arc inférieure à 45 degrés et une route d'une largeur voisine de 7 à 10 mètres, et une longueur totale de l'arc inférieure à 100 mètres (sinon il suffit ajouter quelques noeuds et tracer des sous-arcs, mais sur une trace GPS, 100 mètres c'est déjà beaucoup et on a en principe deux ou tris points intermédiaires pour une relevé correct; sinon la trace n'est pas utilisable).
.


_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr


_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr
Reply | Threaded
Open this post in threaded view
|

Re: Un petit challenge pour un codeur-motard (ou l'inverse)

verdy_p
Heureusement que les clothoïdes ne sont pas la réalité la variation linéeaire du rayon de courbure en fonction de la distance parcourue n'a pas de dérivée seconde aux points de raccordement. même s'il y a continuité du rayon de courbure lui-même. Et c'est là le hic de cette courbe qui rend certains virages impraticables et même dangereux. Et cela oublie complètement la compososante du temps et de la variation de vitesse dans cette courbe. Ma clotoïde suppose une vitesse strictement constante; mais alors il y aussi le problème de la distortion en début et fin de vitvirage (et surtout en fin de virage parce qu'à vitesse constante et au point de courbure minimale l'accélération est maximale.

Pour éviter ça on peut limiter la force centrifuge par le dévers (changement du plan horizontal) mais tous les virages ne sont pas en dévers non plus car il serait impraticable aussi à vitesse plus lente par exemple pour les cyclistes.qui risquent le dérapage ou la chute.​Justement là où l'accélération est maximale et le dévers aussi.
Résultat: on a des routes tracés comme ça où tout le monde coupe une partie du virage et sort de sa voie (ou ,ort sur les bordures) même à vitesse réglementaire. Et le problème est encore accru avec les véhicules longs au passage du point de plus faible rayon de courbure.

Résultat on élargit un peu une voie et on regarde les traces de roulement sur la chaussée: la courbe suivie n'est pas du tout une clothoïde comme dans la théorie trop simpliste. La clothoïde en pratique ne peut marcher que pour des virages de moins de 30 degrés environ; et en pratique uniquement pour les autoroutes et voies ferrées et uniqueent sur des routestracées sur un plan strictement horizontal;  et sans variation non plus de la pente, et tenant compte aussi de la variation de vitesse impoée comme une limite de vitesse temporaire avant virage qui n'est pas atteinte toute de suite. C'est inapplicable aux bretelles d'autoroutes et à la plupart des ponts et tunnels courbes.

Enfin quand je vois cette phrase absurde de Wikipédia :

"conserver les contraintes de continuité des tangentes et de progression monotone des courbures (ce que ne permettent pas directement les seuls arcs de Bézier, dont les subdivisions ne respectent même pas la conservation de la continuité des tangentes suite à une simple transformation linéaire non isométrique de leurs points de contrôle interpolés)."

C'est du n'importe quoi: les arcs de Béziers jointifs connectés pas des tangentes colinéaires gardent leurs tangentes colinéiares avec toute transformation linéaire du plan (isométrique ou pas), et la monotonie de variation de leur courbure.

La clothoïde a d'abord eté développée pour les chemins de fer, pas pour les routes, et pas tracée par des moyen mathémtiques mais avec une règle graduée entre deux rayons de courbures prédéfinis.

Relis un peu la contrainte de définition de base de la clothoïde: un seul point fixe, et une seule direction tangeant initiale (l'autre extrémité est laissée libre et on ne sait pas où elle va; on fixe juste le point au bout qui correspond à l'accélération maximale qu'on eut supporter au milieu d'un virage mais on ne sait pas où il sera (donc on ne pourra pas y connecter un second arc pour la fin du virage. Pour les virages à tracer ce n'est pas le cas: on a deux points fixes et deux tangentes imposées. Et là c'est bien la chaînette qui marche !

Dans tous les cas qu'on choisisse une clothoïde, une chainette, ou une ellipse pour tracer l'arc, on pourra toujours le décomposer facimement en arcs de Bézier (qui respecte aussi 3 des contraintes des chainettes et les 2 contraintes demandée à la clothoïde), et c'est ce qu'on fait en pratique pour des arcs de moins de 30 degrés environ (d'autant plus facilement avec des Béziercubiques) qui demandent moins de décomposition à précision égale). Les Béziers sont plus faciles à calculer et décomposer par des méthodes purement linéaires, meˆme si ce n'est pas facile à approximer avec un matériel comme une simple corde tendue entre les foyers avec les ellipses.

Tout le monde emploie des Béziers aujourdhui... Même pour tracer des cercle (exemple Java, OpenGL...).

_______________________________________________
Talk-fr mailing list
[hidden email]
https://lists.openstreetmap.org/listinfo/talk-fr