IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Représenter une courbe dans un programme


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 83
    Points : 56
    Points
    56
    Par défaut 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

  2. #2
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut Représenter une courbe dans un programme
    Bonjour,

    Citation Envoyé par aperdemak Voir le message
    ... 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 Voir le message
    ... 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.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Même pour tracé simplement un segment de droite, il y a une difficulté.
    Si on veut simplement tracer une ligne noire, si on utilise 2 couleurs (le blanc et le noir), on a forcément un effet de crénelage. La solution est d'utiliser des nuances de gris.
    Recherche avec le mot 'Tracé anti-aliasing' pour avoir plus d'info sur le sujet. Et tu pourras probablement transposer pour ton besoin. Ceci-cit, il y a certainement des tas de librairies qui font le job. Il faut voir selon le langage que tu utilises.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut 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]


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Membre averti
    Avatar de anadoncamille
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2007
    Messages : 395
    Points : 310
    Points
    310
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    pour tracer une courbe efficacement et sans pointillés, on peut tracer des lignes entre deux points calculés successifs. L'indice x peut progresser de pixel en pixel et l'indice y varie selon la fonction. Le tracé de lignes entre deux points successifs permet d'éviter d'avoir une courbe en pointillés et d'appliquer un effet d'anti-aliasing. Enfin cette méthode permet d'avoir un temps de traitement fixe et assez rapide.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  6. #6
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Points : 2 570
    Points
    2 570
    Billets dans le blog
    9
    Par défaut 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 Voir le message
    ... 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 Voir le message
    ... 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 ...


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    je suis du même avis que wiwaxia. Le plus simple c'est de passer en abscisse curviligne.
    Ca permet de s'affranchir de la vitesse de déplacement et d'avoir une suite de points régulièrement espacés.

    En théorie, on peut ainsi obtenir un espacement inférieur au pixel ce qui forme une continuité.
    En pratique, ca crée parfois des pâtés de points assez disgracieux.

    Je préfère viser un espacement de 2 pixels, et relier les points par un segment de droite
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Mettre une pause dans un programme
    Par PNL dans le forum Général Java
    Réponses: 12
    Dernier message: 28/01/2016, 00h54
  2. Réponses: 3
    Dernier message: 24/04/2010, 14h46
  3. Faire une pause dans le programme
    Par shinobi dans le forum Access
    Réponses: 6
    Dernier message: 13/06/2005, 16h37
  4. Integrer une musique dans mon programme
    Par Tutux84 dans le forum C
    Réponses: 2
    Dernier message: 29/01/2005, 12h41
  5. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo