Bonjour,
Dans le cadre d'un travail perso, je dois pouvoir diviser un tracé vectoriel (segment de droite, partie de courbe, courbe de Bézier, partie de cercle, ...) en respectant les paramètres suivants :
- je connais la longueur du tracé à diviser
- j'impose un nombre de segment à répartir sur le tracé
- j'impose une distance entre les 2 premiers "nœuds" (Distance maxi)
- j'impose une distance entre les 2 derniers "nœuds" (Distance mini)
Je dois ensuite répartir les nœuds restant de manière à ce que la distance entre deux nœuds consécutifs évolue progressivement soit en diminuant dans le sens 1 segment maxi => dernier segment Mini, soit le contraire.
Je réalise un petit croquis de ce vers quoi je veux arriver :
ImageShack.us
Dans ce croquis, l'axe vertical indique ne nombre de segments que j'impose dans cet exemple : 5 segments
L'axe horizontal est la longueur du segments : ici, 15 unités de mesure.
Le premier segment (Segment maxi) mesure 5 unités de longueur (entre origine et repère "5" sur l'axe horizontal).
Le dernier segment (segment Mini) mesure 1 unité de longueur (entre repères 14 et 15 sur l'axe horizontal.
J'ai bien évidemment fait très simple ici et je me suis arrangé pour que les nœuds se situent à des distances "évidentes" : le premier segment est entre 0 et 5 unités de mesure, puis 9, 12, 14 et le denier nœud est à 15 (extrémité du tracé).
Les distances varient comme suit : 5, 4, 3, 2 et pour terminer 1 unité de mesure.
Cela ressemble fort à une progression arithmétique mais si, par exemple, je donne les références suivantes :
- longueur du segment = 15
- segment maxi = 6.5
- segment mini = 2.5
- nombre de segments = 5
je suis bloqué car je n'arrive pas à calculer la progression des distances.
La courbe dessinée sur le croquis ressemble un peu à une asymptote mais mes connaissances en math (vieilles de plus de 40 ans ) ne me permettent pas de trouver la solution.
J'ai envisagé un repérage de type logarithmique, mais là, même si la progression des distances entre chaque nœuds peut me satisfaire, je coince sur les les mesures imposées du tracé, du segment maxi et du segment mini.
J'ai essayé le calcul de la progression géométrique en calculant le PGCD des mesures des deux segments maxi et mini puis, sur base de la formule de calcul de la raison d'une progression géométrique, je tente de calculer le nombre de PGCD contenus dans chacun des segments. J'obtiens bien un résultat progressif mais quand je convertis les nombres de PGCD en unités de mesure : un PGCD correspond à une partie de longueur qui est contenue un nombre entier de fois dans les segments maxi et mini.
Pour les valeurs suivantes :
Longueur = 15
nbSegments = 5
distMaxi = 6.5
distMini = 2.5
je trouve :
PGCD = 0.5 => il y a 5 PGCD dans le segment Mini et 13 PGCD dans le segment maxi.
la raison q = (5/13)^1/(5-1) = 0.7875...
ce qui me donnes après calculs :
u1 = 13
u2 = 13 * 0.7875 = 10.2376...
u3 = 10.237 * 0.7875 = 8.0622...
u4 = 8.0622 * 0.7875 = 6.3491...
u5 = 5
Ces valeurs représentent donc un nombre de PGCD qui je convertis en les multipliant pas la valeur du PGCD : 0.5.
J'obtiens comme résultat :
u1 = 13 * 0.5 = 6.5 (valeur maxi imposée)
u2 = 10.2376 * 0.5 = 5.1188
u3 = 8.0622 * 0.5 = 4.0311
u4 = 6.3491 * 0.5 = 3.1745
u5 = 5 * 0.5 = 2.5 (valeur mini imposée)
Mais ici, si je somme ces valeurs, je trouve 21.28 au lieu des 15 imposés au départ !
Où est le problème ?
Comment solutionner mon problème sachant que chacune des valeurs imposables peuvent varier d'une situation à l'autre : le peux devoir imposer un nombre de segments différents, des mesures maxi et mini différentes, un longueur de segment différente ?
Merci de m'aider.
-----