Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo complementar el código fuente del algoritmo

Cómo complementar el código fuente del algoritmo

typedef estructura tEdge

{ int yUpper

float xIntersect, dxPerScan

struct tEdge * next

} borde;

void Insertar borde(borde * borde de lista * borde)//Inserte el nodo en la tabla de borde.

{

Borde *p, * q = lista

p = q-> null)

{ if(edge-& gt; xIntersect & ltp->; xIntersect)p = NULL

else { q = p = p-& gt ;Siguiente; ;}

}

Borde->;siguiente = q->Siguiente;

q->;siguiente = borde

p>

}

Int y next (int k, int CNT, dcpt * pts)//Encuentra el punto singular.

{

int j;

si ((k+1)>(CNT-1))j = 0;

else j = k+1;

mientras (pts[k].y==pts[j].y)

if((j+1)>(CNT-1 ))j = 0;

else j++;

return (pts[j].y

}

Nulo makegerec); (dcpt lower, dcpt lower, intycomp, edge * edge, edge * edge[]) // Genera nodos de tabla de borde e insértalos en la tabla de borde.

{

Edge->;dxPerScan =(float)(superior. x-inferior. x)/(superior. y-inferior. y);

borde->xIntersect = inferior.x

if(superior . y <yComp)

borde->yUpper = superior .y-1;

Otro

Borde->; yUpper = superior.y

insertEdge(edges[lower.y], borde);

}

Voidbuildedgelist (intcnt, dcpt * pts, edge * edge[])//Función principal para crear una tabla de borde.

{

borde*borde;

dcPt v1, v2;

int i, yPrev=pts[cnt-2]. y;

v1.x=pts[cnt-1]. x;v1.y=pts[cnt-1].

y;

for(I = 0;i<cnti++)

{ v2 = pts[I];

if (v1.y!=v2. y)

{ Edge =(Edge *)malloc(sizeof(Edge));

if(v 1 . y & lt; v2.y)

makeEdgeRec (v1, v2, yNext(i, cnt, pts), borde, bordes

else makeEdgeRec(v2, v1, yPrev, borde, bordes

}

p>

yPrev = v 1 .

v 1 = v2;

}

}

Vid buildactivelist ( int scan, edge * active, edge * edge[])//Función de tema que construye la tabla de borde activa.

{ Borde *p, *q;

p = borde[escanear]-> >{ q = p-& gt;

insertEdge(activo, p

p = q

}

}

Escaneo de relleno vacío (escaneo int, borde * activo)//Rellena un par de puntos de intersección.

{

Borde *p1, *p2

int i

p 1 = actividad->;

mientras(p1)

{

p2 = p 1->; siguiente

para(I = p 1->; xIntersect i<p2- >xIntersecti++)

setPixel((int)i,scan);

p1=p2->siguiente;

}

}

void Delete after(edge ​​​​* q)//Elimina el nodo en la lista vinculada.

{

borde * p = q-& gt; siguiente

q->;

q-> p>

Free(p);

}

Void updateactivelist (int scan, edge * active)//Actualiza la tabla perimetral activa después de completarla .

{

Borde *q=activo, *p = activo-> siguiente;

mientras (p)

if( escanear>=p->yUpper)

{

p = p->Siguiente;

eliminar después de(q); }

Otro

{ p->; xIntersect = p-& gt; xIntersect+p-& gt; >

p = p-& gt;Siguiente;

}

}

resolución de vacíos (borde * activo)//Reordenar borde activo nodos de la tabla.

{

Borde *q, *p = activo->siguiente;

Activo->siguiente = NULL

mientras(p )

{ q = p-& gt; siguiente;

insertEdge(activo, p);

p = q;

insertEdge(active, p);

p = q;

p>

}

}

Scanfill vacío (intcnt, dcpt * pts)//Programa principal de relleno de polígonos

{

Edge *edge[WINDOW_HEIGHT], *active

int i, scan

for(I = 0; i< window_height; i++)

{

bordes[I]=(Edge *)malloc(sizeof(Edge));

Bordes[I]-& gt; next = NULL

}

buildEdgeList(cnt, pts, bordes);

active =(Edge *)malloc( sizeof(Edge));

Actividad->;next = NULL

for(scan = 0; scan & lt window_height; scan++)

{

buildActiveList(scan, active, edge);

p>

if(active->siguiente)

{fillScan(sacn,active);<br />updateActiveList(escanear,activo);<br/>resortActiveList(activo );<br/>;}

}

}

}

}

}