Sutherland Hodgman polygone d'écrêtage Algorithme
Sutherland hodgeman polygone d'écrêtage de l'algorithme est l'endroit où nous nous sommes intéressés à l'écrêtage ou seulement une partie particulière de l'polygone donné. Je sais que le concept de l'écrêtage et j'ai vu le code suivant sur le web :
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <math.h>
#include <process.h>
#define TRUE 1
#define FALSE 0
typedef unsigned int outcode;
outcode CompOutCode(float x,float y);
enum { TOP = 0x1,
BOTTOM = 0x2,
RIGHT = 0x4,
LEFT = 0x8
};
float xmin,xmax,ymin,ymax;
void clip(float x0,float y0,float x1,float y1)
{
outcode outcode0,outcode1,outcodeOut;
int accept = FALSE,done = FALSE;
outcode0 = CompOutCode(x0,y0);
outcode1 = CompOutCode(x1,y1);
do
{
if(!(outcode0|outcode1))
{
accept = TRUE;
done = TRUE;
}
else
if(outcode0 & outcode1)
done = TRUE;
else
{
float x,y;
outcodeOut = outcode0?outcode0:outcode1;
if(outcodeOut & TOP)
{
x = x0+(x1-x0)*(ymax-y0)/(y1-y0);
y = ymax;
}
else if(outcodeOut & BOTTOM)
{
x = x0+(x1-x0)*(ymin-y0)/(y1-y0);
y = ymin;
}
else if(outcodeOut & RIGHT)
{
y = y0+(y1-y0)*(xmax-x0)/(x1-x0);
x = xmax;
}
else
{
y = y0+(y1-y0)*(xmin-x0)/(x1-x0);
x = xmin;
}
if(outcodeOut==outcode0)
{
x0 = x;
y0 = y;
outcode0 = CompOutCode(x0,y0);
}
else
{
x1 = x;
y1 = y;
outcode1 = CompOutCode(x1,y1);
}
}
}while(done==FALSE);
if(accept)
line(x0,y0,x1,y1);
outtextxy(150,20,"POLYGON AFTER CLIPPING");
rectangle(xmin,ymin,xmax,ymax);
}
outcode CompOutCode(float x,float y)
{
outcode code = 0;
if(y>ymax)
code|=TOP;
else if(y<ymin)
code|=BOTTOM;
if(x>xmax)
code|=RIGHT;
else if(x<xmin)
code|=LEFT;
return code;
}
void main( )
{
float x1,y1,x2,y2;
/* request auto detection */
int gdriver = DETECT, gmode, n,poly[14],i;
clrscr( );
printf("Enter the no of sides of polygon:");
scanf("%d",&n);
printf("\nEnter the coordinates of polygon\n");
for(i=0;i<2*n;i++)
{
scanf("%d",&poly[i]);
}
poly[2*n]=poly[0];
poly[2*n+1]=poly[1];
printf("Enter the rectangular coordinates of clipping window\n");
scanf("%f%f%f%f",&xmin,&ymin,&xmax,&ymax);
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
outtextxy(150,20,"POLYGON BEFORE CLIPPING");
drawpoly(n+1,poly);
rectangle(xmin,ymin,xmax,ymax);
getch( );
cleardevice( );
for(i=0;i<n;i++)
clip(poly[2*i],poly[(2*i)+1],poly[(2*i)+2],poly[(2*i)+3]);
getch( );
restorecrtmode( );
}
Le codage est bien écrit et j'ai le réel problème de la compréhension de la clip
fonction définie dans le code. Depuis que je suis un débutant en C, je ne pouvais pas en mesure de le comprendre, quelqu'un peut-il expliquer l'algorithme impliqués dans la clip
fonction?
Explain this to me step by step
est pas un bon ajustement pour ce site. Essayez de comprendre quelques questions spécifiques qui nous permettent de poster des réponses ciblées. Où doit-on commencer à répondre vous? Expliquer ce qu'est un float
est? En expliquant ce que #include
? ...expliquer ce que
clip
. Un algorithme pour clip
.en fait, c'est un bon commentaire, j'ai édité ma question.
Vérifier l'algorithme ici: youtube.com/watch?v=Euuw72Ymu0M
OriginalL'auteur sriram | 2011-10-10
Vous devez vous connecter pour publier un commentaire.
L'algorithme de vous présenter n'est pas le Sutherland-Hodgman-Algorithme pour le découpage contre l'arbitraire d'un polygone, mais le Cohen-Sutherland-Algorithme pour le découpage à l'encontre d'une fenêtre rectangulaire. L'extrait de code semble être pris directement à partir de la Article de Wikipedia. Cet article explique l'algorithme et il explique aussi l'exemple de code étape par étape, ainsi que leur version contient de nombreux commentaires utiles. L'idée majeure est de classer l'emplacement de la ligne de points de terminaison à l'égard de la fenêtre d'affichage à l'aide d'un 4 bits de code, ce qui rend la limitation réelle mises en œuvre reposent sur de simples opérations bit à bit.
En supposant que vous comprenez les constructions de programmation de base (comme les boucles, si, ...), de base de l'arithmétique et le fonctionnement de base de l'algorithme (peut-être avec l'aide de Wikipedia), alors la clé de la compréhension de l'exemple de code est de garder à l'esprit que les opérateurs de C
|
et&
réaliser des opérations bit à bit.Si vous êtes vraiment à la recherche pour le Sutherland-Hodgman-Algorithme de clip contre l'arbitraire d'un polygone, puis complètement oublier cet exemple de code. La source que vous avez obtenu à partir de, à tort, les attributs de cette à la Sutherland-Hodgman-Algorithme ou vous avez mal interprété ce dû au fait que les deux algorithmes sont attribués à Ivan Sutherland, mais ceux-ci sont fondamentalement différents algorithmes.
OriginalL'auteur Christian Rau