2010-07-16 5 views
0

Je crée une application de dessin vectoriel. J'utilise cet algorithme pour générer des contours.Aide sur les contours connectés

Ce algorthm fonctionne bien, sauf qu'il ne ferme pas les grandes lignes comme on le voit ici: alt text http://img716.imageshack.us/img716/2633/noclosure.png

Je ne suis pas sûr de ce que je dois faire pour veiller à ce qu'il ferme toujours les grandes lignes. J'ai essayé d'insérer le dernier sommet à la position [0] dans le vecteur std :: mais cela n'a pas aidé.

Doublepoint ressemble:

struct DOUBLEPOINT { 
double point[2]; 
}; 

Comment puis-je faire en sorte qu'il toujours ferme correctement la forme même sur des angles vifs?

Merci

Répondre

1

Essayez annexant une copie des premier et deuxième points à la fin du vecteur avant le traçage il. Votre premier et dernier segment de ligne se chevaucheront, mais il doit s'assurer que tous les points sont connectés et que tous les coins sont arrondis de la même manière.

1

Que diriez-vous:

for(size_t i = 0; i < input.size(); ++i) 
{ 
    POINTFLOAT cur; 
    POINTFLOAT nxt; 

    if(i == input.size() - 1) 
    { 
     cur.x = input[i].point[0]; 
     cur.y = input[i].point[1]; 

     nxt.x = input[0].point[0]; 
     nxt.y = input[0].point[1]; 
    } 
    else 
    { 
     cur.x = input[i].point[0]; 
     cur.y = input[i].point[1]; 

     nxt.x = input[i+1].point[0]; 
     nxt.y = input[i+1].point[1]; 
    } 
+0

Cela fonctionne presque, mais il ne tourne pas autour de la fin comme on le voit ici: http://img36.imageshack.us/img36/1385/asjhh.png – jmasterx

+0

Eh bien, vous pouvez utiliser la même idée pour ajouter un autre point, et répète: 'cur = entrée [0]' et 'nxt = entrée [1]'. – Gianni

1

J'utilise généralement modulus:

nxt = input[(i+1) % input.size()]; 
+0

Ceci est plus difficile à comprendre ce qui se passe et pourquoi, et est également moins efficace. – Gianni

+0

En fait, je le trouve plus clair et beaucoup plus court (et donc moins sujette aux erreurs). –

+0

J'ai essayé de modifier mon oroginal avec ceci et cela a le même problème que ci-dessus http://img36.imageshack.us/img36/1385/asjhh.png – jmasterx