Représenter une courbe dans un programme
Bonjour, c'est la première fois que je manipule des courbes dans un programme donc j'aimerais qq eclaircissement. Je voudrais savoir si pour représenter une courbe paramétrée il faut nécaissèrement avoir une approximation de celle ci ou s'il existe une méthode pour afficher de façon continue(du point de vu pixel) une courbe paramétré.
J'utilise actuellement un petit bricolage qui calcule l'incrémentation du paramètre en fonction de la distance des points de la courbe par exemple si le point 1 et 2 ont un écart >1 alors je baisse l'incrémentation de sorte à avoir la valeur de la courbe pour le pixel entre les points 1 et 2.
Merci d'avance
Représenter une courbe dans un programme
Bonjour, :D
Citation:
Envoyé par
aperdemak
... Je voudrais savoir si pour représenter une courbe paramétrée il faut nécessairement avoir une approximation de celle-ci, ou s'il existe une méthode pour afficher de façon continue (du point de vue des pixels) une courbe paramétrée ...
Tu évoques un faux dilemme.
a) Il n'y a au départ aucune approximation si l'on dispose des expressions exactes des fonctions paramétriques (X(t), Y(t)).
b) La présence des pixels entraîne une discrétisation de l'espace, toute position instantanée étant représentée par une case colorée de coordonnées entières.
Le lien entre les coordonnées théoriques (X, Y) et celles dans le corps de l'image (rangs des colonnes & lignes de la matrice) est réalisé par l'intermédiaire de facteurs d'échelle (Kx, Ky) le plus souvent égaux, et l'intervention de fonctions discontinues telles que Round(.) ou Trunc(.), qui convertissent des réels en entiers.
On aura par exemple: c = Round(Kx * X(t)) , l = Round(Ky * Y(t)) .
Citation:
Envoyé par
aperdemak
... J'utilise actuellement un petit bricolage qui calcule l'incrémentation du paramètre en fonction de la distance des points de la courbe; par exemple si les points 1 et 2 ont un écart >1 alors je baisse l'incrémentation de sorte à avoir la valeur de la courbe pour le pixel entre les points 1 et 2.
Merci d'avance
Effectivement, si l'on veut préserver la continuité du graphe et ne pas laisser apparaître de pointillés, il faut que les valeurs successives (tn, tn+1) du paramètre (t) soient suffisamment rapprochées, et présentent un écart (h = tn+1 - tn) suffisamment petit.
La contigüité des pixels successifs exige théoriquement les conditions: (Kx*Abs(X') * h < 1) et (Ky*Abs(Y') * h < 1) ,
mais compte tenu des irrégularités produites par la conversion des réels en entiers, il faut prendre des conditions plus strictes, par exemple:
(Kx*Abs(X') * h <~ 0.3) et (Ky*Abs(Y') * h <~ 0.3) , soit en moyenne 3 pixels superposés en un seul.
L'ennui est que le taux de variation des fonctions (X(t), Y(t)) - on parlera inévitablement des "vitesses" X'(t), Y'(t) - peut varier beaucoup sur le domaine étudié, de sorte qu'il n'est pas possible d'éviter l'apparition de pointillés, à moins d'un grand gaspillage de temps de calcul sur les parties du graphe les plus lentement parcourues.
Changer la valeur du pas (h) en cours de tracé peut conduire à un résultat inesthétique; il n'est pas forcément souhaitable.
Représenter une courbe dans un programme
Un traitement anti-crénelage est effectivement important pour l'aspect du graphe; mais encore faut-il disposer de points suffisamment rapprochés ...
aperdemak paraissant tenir à la continuité du tracé, il me vient une idée que je n'ai jamais appliquée: pourquoi ne pas renoncer à l'emploi d'un pas constant, et passer à une incrémentation plus souple qui ferait passer progressivement le paramètre (t) de sa valeur initiale (t0) à sa valeur finale(t1) - ou juste au-delà ?
On pourrait envisager tk+1 = tk + h , avec h = g / (V + a) , g ~ 0.3 à 0.5 (valeurs à tester),
et pour la "vitesse graphique" du point mobile M(t): V = (Kx2*X'2(t) + Ky2*Y'2(t))1/2 ou plus sommairement: V = Max(Kx*Abs(X'(t)) , KyAbs(Y'(t))) .
Le terme (a = 1 ?) permet de borner supérieurement les valeurs du pas (h <= hmax = g /a) dans le cas (nullement improbable) où la vitesse (V) s'annulerait.
Exemples: x = t3 , y = t2 (ou t6) sur [-1 ; +1] :aie:
Représenter une courbe dans un programme
Avantages certains, mais procédé dommageable à l'esthétique du graphe, lorsque les longueurs des segments ne sont plus très supérieures au rayon local de courbure ... À nombre égal de points calculés, le tracé en pointillés apparaît préférable parce que l'observateur reconstitue inconsciemment les parties manquantes des courbes.
C'est bien sûr une affaire de réglage, et l'on peut toujours augmenter le nombre de segments - au détriment de la rapidité du calcul ... Tout dépend de ce que l'on cherche.
À la limite, un logiciel approprié peut conduire à un résultat tout à fait acceptable, comme l'a suggéré l'un des intervenants
Citation:
Envoyé par
tbc92
... Ceci-cit, il y a certainement des tas de librairies qui font le job. Il faut voir selon le langage que tu utilises.
Mais ce n'est peut-être plus ce que recherche l'initiateur du débat, qui s'intéressait au départ au codage du tracé continu d'une courbe paramétrée.
Citation:
Envoyé par
aperdemak
... Je voudrais savoir ... s'il existe une méthode pour afficher de façon continue (du point de vu pixesl) une courbe paramétrée ...