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 :

Contracter , agrandir un polygone comme paint shop pro


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    204
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 204
    Par défaut Contracter , agrandir un polygone comme paint shop pro
    Bonjour,
    je cherche depuis 1 demi - journée à agrandir / contracter un polygone comme
    paint shop pro (contracter la selection).

    Le rendu n'est pas bon.

    Il dessine en rouge les points d'origine et en bleu les point calculées

    L'exemple ci-dessous contracte le polygone de 16 pixels , et ca marche pas !

    Code c++ : 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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    float angle(int x,int y)
    {
        if (x==0) return 0;
             float ang=atan(y/1.0/x);
             if (x<0) ang=ang-(PI);
             return ang;
    }
     
    void __fastcall TForm1::FormPaint(TObject *Sender)
    {
     
            int number=0;
            int sx=0,sy=0;
            vector <TV>::iterator ra;
            ra=tv.begin();
     
            int size=tv.size();
            if (size>0)
            for (int i=0;i<=tv.size();i++)
            {
     
     
     
                    for (int j = 0 ; j < 3 ; j++)
                    {
     
                            ra=tv.begin()+((i+j)%size);
                            x[j]=ra->x1;
                            y[j]=ra->y1;
                            xold[j]=x[j];
                            yold[j]=y[j];
                    }
                    for (int j = 0; j <3;j++)
                    {
                            x[j]-=x[1];
                            y[j]-=y[1];
                    }
                     angx1=angle(x[2],y[2]);
                     angx2=angle(x[0],y[0]);
     
                     angxx=(angx2+angx1)/2.0;
                     angi=(angxx/PI)*180;
     
     
                    x[1]=xold[1]+x[1]+(16*cos(angxx));
                    y[1]=yold[1]+y[1]+(16*sin(angxx));
                    ra=tv.begin()+((i+1)%size);
                    ra->nx1=x[1];
                    ra->ny1=y[1];
     
     
     
     
     
            }
     
             ra=tv.begin();
             if (tv.begin()!=tv.end())
             {
            while (ra!=tv.end()-1)
            {
     
                    Canvas->Pen->Color=clRed;
                    Canvas->MoveTo(ra->x1,ra->y1);
                    Canvas->LineTo((ra+1)->x1,(ra+1)->y1);
     
                    ra++;
            }
            }
             ra=tv.begin();
             if (tv.begin()!=tv.end())
             {
            while (ra!=tv.end()-1)
            {
     
                    Canvas->Pen->Color=clBlue;
                    Canvas->MoveTo(ra->nx1,ra->ny1);
                    Canvas->LineTo((ra+1)->nx1,(ra+1)->ny1);
     
                    ra++;
            }
            }
     
    }
    Si vous pouviez m'aider .
    Merci beaucoup

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    • Etape 1 :

      Calculer le barycentre

    • Etape 2 :

      Appliquer la transformation (zoom ou dézoom) à chaque segment (sommet, barycentre)


Discussions similaires

  1. Windows 8 et PAint Shop Pro
    Par Lulu27 dans le forum Windows 8
    Réponses: 2
    Dernier message: 20/01/2013, 13h05
  2. [WD15] Agrandir un Polygone par programmation
    Par itsanta dans le forum WinDev
    Réponses: 1
    Dernier message: 28/09/2011, 08h56
  3. Contraction d'un polygone
    Par Luigicube dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 08/12/2009, 11h46
  4. Colorer une case comme paint
    Par ptitepo dans le forum Excel
    Réponses: 7
    Dernier message: 23/05/2008, 16h49
  5. Documentez vos librairies JavaScript comme des pros !
    Par Claude Pelletier dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/12/2005, 14h09

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