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

Turbo Pascal Discussion :

[TP] Relier deux points ? [Non suivi]


Sujet :

Turbo Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [TP] Relier deux points ?
    Salut,

    Premièrement voici ce que je veux faire :
    Relier deux points par un trait.
    ex : A(0,1) ----- B(5,3)

    De manière a pouvoir tracer un graphique avec des points.


    Deuxièmement, j'utilise la librairie "graph" avec les fonctions GotoXY et LineTo.
    Ca marche c'est sur, mais cette librairie est énorme...et j'ai pas bcp de place à disposition!

    Enfin, malgrès les fonctions OutText et OutTextXY, je ne peux ecrire à l'écran le contenu de variable...or j'en ai besoin !



    Ma qestion est donc simple :
    Existe-t-il une librairie (et fonction(s) associée(s) ?) me permettant de lier deux points en mode CRT ?


    NB : je cherche toute solution alternative à celle-ci ! :-]


    Merci de me répondre les gens :p

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Salut,

    Citation Envoyé par wwwroom
    De manière a pouvoir tracer un graphique avec des points.
    Comme tu le dis toi-même, "tracer un graphique"; ainsi si tu veux relier deux points en mode texte, il te faudra définir un algorithme qui placera des symboles (des tirets par exemple) entre les deux points (par exemple, compare d'abord les deux abscisses, en partant du point ayant la plus petite abscisse place des tirets jusqu'à ce qu'il y'ait égalite d'abcisses et ensuite il suffira de faire la même chose avec les ordonnée, tu obtiens donc deux séries de tirets).

    Par contre, c'est nettement plus simple en mode graph dans la mesure où tu disposes des fonctions Line(x1,y1,x2,y2) et la fonction LineTo(x,y)

    Citation Envoyé par wwwroom
    Deuxièmement, j'utilise la librairie "graph" avec les fonctions GotoXY et LineTo.
    Ca marche c'est sur, mais cette librairie est énorme...et j'ai pas bcp de place à disposition!


    Citation Envoyé par wwwroom
    Enfin, malgrès les fonctions OutText et OutTextXY, je ne peux ecrire à l'écran le contenu de variable...or j'en ai besoin !
    Les fonctions OutText et OutTextXY nécessitent un argument string. Et tu disposes des outils necessaires pour effectuer la conversion en string. Tu peux consulter cette page de la nouvelle FAQ Pascal

    A+

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    jsuis pas sur d'avoir capter ton histoire d'algorithm king...tu pourrais détaillé stp ?


    merci

  4. #4
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Salut,

    En fait l'algorithme que je donnais hier consiste juste à tracer le chemin entre les deux points.

    Supposons que tu disposes de deux points A(5,12) et B(9,10) par exemple, le principe consiste donc à prendre l'abscisse la plus petite, à mettre des tirets horizontalement jusqu'à ce qu'on ait égalité d'abscisse (ainsi, l'abscisse du dernier tiret horizontal sera (9,12)) puis il ne te reste plus qu'à mettre une autre série de tiret pour aller de ce point vers le point B(9,10) en complétant des tirets sur la verticale cette fois (dans notre cas, on mettra des tirets de l'ordonnée 12 à l'ordonnée 10...

    A+

  5. #5
    Membre averti Avatar de charly
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 329
    Points : 358
    Points
    358
    Par défaut
    sinon , y a l'unité graphique VBE2 qui est plus légere et plus simple d'utilisation

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Euh plus légère c'est pas sûr ça Charly...

    SI je me souviens bien elle avoisine les 100 Ko, alors que l'unité graph n'en fait que 20 (à peu près)....

  7. #7
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Sauf que l'unité Graph charge en mémoire le pilote BGI (Ah ? Ils avaient oublié de le dire ? Oh...) Et puis la mienne est plus puissante, donc forcément... (en fait, tout compris, la BGI pèse environ 40 Ko et la mienne 140 8) ) Mais va lancer du 1280x1024x16 millions de couleurs avec la BGI et afficher un dégradé

    Mais la question n'est pas là.

    Pour tracer une ligne en mode texte, tu peux toujours te servir de l'algorithme de Bresenham. Les "pixels" seront alors des caractères à l'écran. Tu peux ensuite un peu améliorer l'algorithme en choisissant parmi les caractères -, |, / et \ en fonction de la pente de la droite.

    Et si tu veux vraiment te servir de pixels en mode texte (si si, c'est possible), tu risques de t'amuser un peu.

    Autre solution, très, très légère : utiliser le mode graphique 13h (320x200). Les procédure de tracé de ligne ne font que quelques lignes de code, et on arrive à obtenir quelque chose de fonctionnel très rapidement.

    Pour info, voilà une implémentation de Bresenham :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    function GetSign(X: Integer): Integer;
    begin
    if X < 0 then GetSign := -1
    else if X = 0 then GetSign := 0
    else GetSign := +1;
    end;
     
     
    procedure Line(X1, Y1, X2, Y2: Integer; Color: Byte);
    var
       X, Y: Integer;
       Count: Integer;
       XS, YS: Integer;
       XM, YM:Integer;
    begin
    X := X1;
    Y := Y1;
    XS := X2 - X1;
    YS := Y2 - Y1;
    XM := GetSign(XS);
    YM := GetSign(YS);
    XS := Abs(XS);
    YS := Abs(YS);
     
    PutPixel(X, Y, FColor);
     
    if XS > YS then
       begin
       Count := -(XS div 2);
       while X <> X2 do
         begin
         Inc(Count, YS);
         Inc(X, XM);
         if Count > 0 then
            begin
            Inc(Y, YM);
            Dec(Count, XS);
            end;
         PutPixel(X, Y, Color);
         end;
    end
    else
       begin
       Count := -(YS div 2);
       while Y <> Y2 do
         begin
         Inc(Count, XS);
         Inc(Y, YM);
         if Count > 0 then
            begin
            Inc(X, XM);
            Dec(Count, YS);
            end;
         PutPixel(X, Y, Color);
         end;
    end;
    end;
    A+

  8. #8
    Membre chevronné
    Avatar de lilington
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2005
    Messages
    681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 681
    Points : 1 800
    Points
    1 800
    Par défaut
    bonjour

    cette algo marche mais dans un seul cas
    soit line(x1,y1,x2,y2) avec x1<x2 et y1<y2
    je l'ai testé et j'ai d'ailleur vu plusieurs prog du genre avec le même probleme
    je n'arrive donc pas en mode 13 à tracer une droite oblique si sa direction est de bas en haut ou de droite à gauche ou combinaison des 2

    il y a un autre probleme : étant donnée que on part de x1 vers x2
    il est impossible de tracer line(1,1,10,199) la ligne s'arrête dès que l'x=x2
    resultat la ligne est écoutée

  9. #9
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    en mode text, il est en principe pas possible de dessiner une droite inclinée. En faite cela est possible si on redéfini le fonte de caractére pour définir des elements de droite. Cela est 1 peu long mais tout à fait possible. Cela devient + scabreux si on doit avoit plusieurs droites passnt par le "même caractère ASCII" de l'écran CRT"

  10. #10
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Si vous travaillez en mode $13, J'ai un unit qui gere droite, cercle, caracteres, ...
    Me donner une adresse où il faut le downloader. Le code source est trop long pour être mis ici

Discussions similaires

  1. relier deux points entre eux
    Par persé dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/04/2015, 14h03
  2. [plot3] relier les points de deux tableaux 2 à 2
    Par cedji dans le forum MATLAB
    Réponses: 2
    Dernier message: 02/05/2012, 11h44
  3. Réponses: 2
    Dernier message: 29/07/2010, 10h12
  4. Relier deux points dans l'espace par des segments perpendiculaires
    Par Poupi0 dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 27/04/2010, 15h06
  5. Relier deux points, tracer des routes,postgis
    Par stylo999 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 28/08/2008, 17h41

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