jueves, noviembre 30, 2006

Spam diario en Gmail


Este es el SPAM diario que recibo en un dia cualquiera de la semana en mi cuenta de Gmail (unos 1000 correos electrónicos no deseados). Exceptuando los fines de semana donde se nota bastante que baja el tráfico. Debe ser motivado a que uso el correo electrónico para los registros en blogs y webs varias y que también en esta cuenta tengo redireccionadas varias otras como la de la UAB entre ellas.

La mayoría incluyen un texto en inglés en el que te intentan vender desde todo tipo de medicamentos a ofrecerte trabajo o cuentas de ahorro en no sé qué bancos de no sé dónde.

La cuestion es que el gestor de correo electrónico de Google funciona bastante bien y me los detecta casi todos... aunque de vez en cuando se me cuelan unos 10 al dia en mi Inbox ... así que voy "entrenando" la máquina... I have a dream...

martes, noviembre 28, 2006

Salida a Arenys de Mar - Fotos -

Fotos de la salida a Arenys de Mar

(pincha en las fotos para high-res
1024 - 768 px aptas para fondo de pantalla)

Vista de la zona alta del pueblo un día azul.



El mar en octubre a eso de las 12 del mediodía.


Una palmera... :P

miércoles, noviembre 22, 2006

Terrassa FC 3 - 1 RCD Espanyol B

Terrassa FC 3 - 1 RCD Espanyol B

lunes, noviembre 20, 2006

Barça B 0 - 2 Terrassa FC

Barça B 0 - 2- Terrassa FC

viernes, noviembre 10, 2006

Ventajas de tener un novio friki (geek en inglés)

Ventajas de tener un novio friki (geek en ingles):

1. Los frikis son útiles: pueden arreglar tu ordenador, portátil… Estas habilidades son muy útiles y pueden hacer que tu vida transcurra sin problemas.
2. Son más románticos de lo que se dice. Su idea de romanticismo puede ser hacer una página web sobre ti. Pero, hey, eso dura más tiempo que unas flores y se la puedes enseñar a tus amigas.
3. Tienen cerebros y normalmente tienen mucha educación.
4. Son relativamente de bajo mantenimiento, así que no necesitarás cenas complicadas. Y si no eres buena cocinera, puedes encargar una pizza.
5. No tienes que preocuparte por lo que estará haciendo. Probablemente le encuentres delante de su ordenador.
6. Confían en ti, así que puedes ser tú misma delante de él. ¿Te gusta andar por la casa con una camiseta andrajosa porque es cómoda? A él no le importa. No se mosquean porque no te maquilles o no te quieras molestar en arreglarte el pelo.
7. Te hará brillar donde quiera que vayáis. No importa lo cutre que sea tu sentido del estilo, no importa lo torpes que sean tus habilidades sociales, a su lado serás una estrella de la moda y una elegante diplomática. Hará que causes tan buena impresión, que te enamorarás de ti misma.
8. Si no te interesan las computadoras, televisores y DVD, y no te preocupa ser popular y estar a la moda, ¿qué hay de los últimos chismes tecnológicos? Si decides salir con un friki, serás la orgullosa propietaria de los chismes más novedosos.
9. Tampoco te engañará. Coloca a la mujer más sexy del mundo, pongamos Angelina Jolie, en una habitación con un friki. En el otro rincón de la habitación, coloca el último modelo de algun ordenador. Apuesto a que tu friki preferirá con mucho más jugar con el ordenador que conocer a Angelina Jolie. De hecho, puede que ni la vea si el ordenador está encendido y conectado a Internet. Tendra que mirar su correo electrónico, navegar por la web y poner en su blog que está en una habitación con Angelina Jolie.
10. La razón final es: realmente le importas. No que aspecto tienes (aunque también cuenta), no lo delgada que estás, no con cuanto maquillaje te arreglas, sino que le gustas por ser tu misma.

Artículo original escrito por Nick Denoo bajo la Licencia Creative Commons.

jueves, noviembre 09, 2006

martes, noviembre 07, 2006

Terrassa 2 - Eldenc 0

El Terrassa FC més líder encara després de guanyar per 2 gols a 0 a l'Eldenc

viernes, noviembre 03, 2006

Espinete y don Pimpón chanantes

Espinete y don Pimpón chanantes


jueves, noviembre 02, 2006

Remember Terrassa - Barakaldo ascenso a 2º A

Remember Terrassa - Barakaldo ascenso a 2º A

Golazo de Gibanel



Golazo de Keko



Ascenso!!!

...pegad, violad, acosad, robad pero ¡no se os ocurra usar eMule!

Se trata de aprender a interpretar correctamente el Código Penal siguiendo la lógica aplicada por la industria y que considera que la reproducción, distribución y comunicación pública de obras intelectuales que te den cualquier beneficio o utilidad es delictiva.

Para ello, os recomiendo practicad con este sencillo test, siguiendo la interpretación que hace la industria del artículo 270 del Código Penal.

Por favor, elegid cuál es la acción considerada de mayor gravedad

1. PREGUNTA:
(a) Luis se descarga una canción de Internet.
(b) Luis decide que prefiere el disco original y va a El Corte Inglés a hurtarlo. Una vez allí, y para no dar dos viajes, opta por llevarse toda una discografía. La suma de lo hurtado no supera los 400 euros.

RESPUESTA: La descarga de la canción sería un delito con pena de 6 meses a dos años. El hurto de la discografía en El Corte Inglés ni siquiera sería un delito, sino una simple falta (art. 623.1 del Código Penal).

2. PREGUNTA:
(a) Luis se descarga una canción de Internet.
(b) Luis va a hurtar a El Corte Inglés y, como se la va la mano, se lleva cincuenta compactos, por valor global de 1.000 euros.

RESPUESTA: Seguiría siendo más grave la descarga de Internet. El hurto sería un delito, porque supera los 400 euros, pero sería de menor pena que la descarga (artículo 234 del Código Penal).

3. PREGUNTA:
(a) Sergio, en el pleno uso de sus facultades mentales, se descarga una canción de Malena Gracia.
(b) Sergio, en un descuido de Malena Gracia, se lleva su coche y lo devuelve 40 horas después.

RESPUESTA: Sería más grave la descarga. El hurto de uso de vehículo tiene menos pena, a tenor del artículo 244.1 del Código Penal.

4. PREGUNTA:
(a) Ocho personas se intercambian copias de su música favorita.
(b) Ocho personas participan en una riña tumultuosa utilizando medios o instrumentos que pueden poner en peligro sus vidas o su integridad física.

RESPUESTA: Es menos grave participar en una pelea que participar en el intercambio de compactos. Participar en una riña tumultuosa tiene una pena de tres meses a un año (art. 154 del Código Penal) y el intercambio tendría una pena de 6 meses a 2 años (art. 270 del Código Penal). Si algún día te ves obligado a elegir entre participar en un
intercambio de copias de CDs o participar en una pelea masiva, escoge siempre la segunda opción, que es obviamente menos reprobable.

5. PREGUNTA:
(a) Juan copia la última película de su director favorito de un DVD que le presta su secretaria Susana.
(b) Juan, aprovechando su superioridad jerárquica en el trabajo, acosa sexualmente a Susana.

RESPUESTA: El acoso sexual tendría menos pena según el artículo 184.2 del Código Penal.

6. PREGUNTA:
(a) Pedro y Susana van a un colegio y distribuyen entre los alumnos de preescolar copias de películas educativas de dibujos animados protegidas por copyright y sin autorización de los autores.
(b) Pedro y Susana van a un colegio y distribuyen entre los alumnos de preescolar películas pornográficas protagonizadas y creadas por la pareja.

RESPUESTA: La acción menos grave es la de distribuir material pornográfico a menores según el artículo 186 del Código Penal. La distribución de copias de material con copyright sería un delito al existir un lucro consistente en el ahorro conseguido por eludir el pago de los originales cuyas copias han sido objeto de distribución.

7. PREGUNTA:
(a) Ramón, que es un bromista, le copia a su amigo el último disco de Andy y Lucas, diciéndole que es el "Kill'em All" de Metallica.
b) Ramón, que es un bromista, deja una jeringuilla infectada de SIDA en un parque público.

RESPUESTA: La segunda broma sería menos grave, a tenor del artículo 630 del Código Penal.

8. PREGUNTA:
a) Juan fotocopia una página de un libro.
b) Juan le da un par de puñetazos a su amigo por recomendarle ir a ver la película "Los Ángeles de Charlie".

RESPUESTA: La acción más grave desde un punto de vista penal sería la "a", puesto que la reproducción, incluso parcial, sería un delito con pena de 6 meses a dos años de prisión y multa de 12 a 24 meses. Los puñetazos, si no precisaron una asistencia médica o quirúrgica, serían tan solo una falta en virtud de lo dispuesto en el artículo 617 en relación con el 147 del Código Penal.

Así que ya sabéis: pegad, violad, acosad, robad pero que no se ocurra usar el EMULE!!!

Artículo original escrito por Internautas.

miércoles, noviembre 01, 2006

Práctica de Gráficos por Computador 1

Lo tenía por ahí y antes de que se heche a perder...

#include
#include
#include
#include
#include
#include
#include
#include

/***********************************************/
/* Deficinicio de les estructures del programa */
/***********************************************/
typedef struct Punt { int x,y; } Punt;
typedef struct Poligon { int n,color; Punt *p; } Poligon;
typedef struct Xwindow { int x0,x1,y0,y1; } Xwindow;

typedef struct Pila
{ Punt *p;
struct Pila *anterior;
} Pila;

typedef struct Costat
{ float x, dx;
int ymax;
struct Costat *seg;
} Costat;
/***********************************************/

int llegir_poligon (char *, Poligon *);
void alliberar_poligon(Poligon *);
void llegir_comandes(char *, char *);
void inicialitzar(void);
void finalitzar(void);
int cls(void);

int mode_grafic(void);
int mode_texte(void);

/********************************************************************/
/* PROTOTIPUS DE LES FUNCIONS */
/********************************************************************/

/* Prototipus del retall Sutherland-Hogman */
void retall_SH(int,int,int,int,Poligon *);
void interseccio(Punt *,Punt *,Xwindow *,int);
int dintre(int,int,Xwindow *,int);

/* Llavor millorada (iterativament i amb una pila dinamica) */
void llavor_millorat(int,int,Poligon *,int);
void vei(int *,int,int,int);
void lineas_adjacents(int,int,int,Pila **,int);
Poligon* intercambiar(Poligon** pol);

void Finestra(Xwindow *,int);
void DibuixaPoligon(Poligon *,int);
float pendent(int,int,int,int);

/* Prototipus per a la pila que sutilitza en la llavor millorada */
Pila* Crear_node();
void Push(Pila **,Punt);
Punt Pop(Pila **);

/* Prototipus del algorisme Y-X */

void emplenat_Y_X(Poligon *);
void Y_max_min(int *max,int *min,Poligon *pol);
Costat** crear_TC(Poligon *pol,int max,int min);
void iniciar_a_null(Costat **tabla,unsigned int valor);
Costat* crear_lado(Poligon *pol,unsigned int *vertice,unsigned int *min,long
int *dy);
void guardar_TC(Costat** TC, Costat* lado,unsigned int y_min);
int alliberar_TC(Costat **taula);
void afegir_costats_LCA(Costat* lista,Costat** LCA);
Costat *ordenar_LCA(Costat* llista);
Costat* mezclar_listas(Costat* lista1,Costat* lista2);
int eliminar_lados_LCA(Costat** llista,int y_actual);
void actualizar_LCA(Costat** llista);
void pintar(Costat* lista,int posicion_y);

/* -----------------------------------------------------------------*/


/*************************************************/
/* M A I N */
/*************************************************/

void main(int argc,char *argv[])
{
if(argc!=3)
{
printf("Us: prac \n");
exit(0);
}

inicialitzar();
llegir_comandes(argv[1],argv[2]);
finalitzar();
}

void llegir_comandes(char *nom_fitxer,char *nom_poligon){

FILE *fp;
Poligon pol;
char comanda[256], comentari[256];
int x0, y0, x1, y1, color;

if ((fp=fopen(nom_fitxer,"rt"))==NULL)
{
printf("Error en obrir el fitxer de comandes\n");
getch();
finalitzar();
exit(0);
}

if (strcmp(nom_poligon,""))
{ if (!llegir_poligon(nom_poligon,&pol))
{ printf("Error en obrir el poligon \n");
getch();
finalitzar();
exit(0);
}
}

while (fscanf(fp,"%s",comanda)!=EOF)
{ /* COMANDES GENERALS */

if (strcmp(comanda,"REM")==0) fgets(comentari,256,fp);
else if (strcmp(comanda,"CLS")==0) {cls();}
else if (strcmp(comanda,"PAUSA")==0) {getch();}
else if (strcmp(comanda,"RETALLA")==0)
{ fscanf(fp,"%d",&x0);
fscanf(fp,"%d",&y0);
fscanf(fp,"%d",&x1);
fscanf(fp,"%d",&y1);
retall_SH(x0,y0,x1,y1,&pol);
}

else if (strcmp(comanda,"OMPLE")==0)
{ emplenat_Y_X(&pol);
getch();
cls();
DibuixaPoligon(&pol,4);
}

else if (strcmp(comanda,"LLAVOR")==0)
{ fscanf(fp,"%d",&x0);
fscanf(fp,"%d",&y0);
fscanf(fp,"%d",&color);
llavor_millorat(x0,y0,&pol,color);
getch();
}

/* COMANDO NO RECONOCIDO */
else {printf("comanda: %s no reconeguda\n",comanda);}
} if (strcmp(nom_poligon,"")!=0) alliberar_poligon(&pol);
}

void inicialitzar()
{ if(mode_grafic()==0)
{ printf("Error en inicialitzar");
exit(0);}
}

void finalitzar()
{ if(mode_texte()==0)
{ printf("Error en finalitzar");
exit(0);}
}

int llegir_poligon(char *nom_fitxer, Poligon *pol){

FILE *fitx_in;
int i;

pol->n=0;
pol->color=0;
pol->p=NULL;

fitx_in=fopen(nom_fitxer,"rt");
if(!fitx_in) return 0; /* No s'ha pogut obrir */

if(fscanf(fitx_in,"%d",&pol->n)!=1){
pol->n=0;
fclose(fitx_in);
return 0;
} /* No pot llegir */

/*Reserva de memoria pels punts del poligon*/
pol->p=(Punt *)malloc(sizeof(Punt)*pol->n);

if(!pol->p){

pol->n=0;
fclose(fitx_in);
return 0;
} /* No es pot aconseguir memoria */

for(i=0;in;i++) {
if(fscanf(fitx_in,"%d %d",&(pol->p[i].x),&(pol->p[i].y))!=2){
pol->n=0;
free(pol->p);
pol->p=NULL;
fclose(fitx_in);
return 0;
}
}
return 1;
}

void alliberar_poligon(Poligon *pol)
{

if( (pol->p) != NULL )
{
free(pol->p);
pol->p=NULL;
pol->color=NULL;
pol->n=0;
}
}

int cls()
{ cleardevice();
return 1;
}

int mode_grafic()
{ int gdriver=DETECT,gmode,errorcode;

initgraph(&gdriver,&gmode,"h:\\");
errorcode=graphresult();
if (errorcode!=grOk)
{ printf("Error: %s\n",grapherrormsg(errorcode));
printf("Prem una tecla per continuar");
getch();
return 0;
}
return 1;
}

int mode_texte(){
closegraph();
return 1;
}

/*********************************************************/
/* Nomes incloure codi a partir d'aquest punt */
/*********************************************************/

void retall_SH(int x0,int y0,int x1,int y1,Poligon *pol)
{
int vertex,recta,anterior,actual,last,i;
Poligon tmp;
Xwindow window1;
Punt s;

if (pol->n==0){/*Es por si nos pasa un poligono vacio*/
printf("Poligon inexistent");
exit(1);
}
tmp.p=(Punt *)malloc( sizeof(Punt) * 2 * (pol->n) );
if( (tmp.p) == NULL) {printf("RAM1 out");exit(0);}
tmp.n=0;
tmp.color=0;

window1.x0 = x0;
window1.x1 = x1;
window1.y0 = y0;
window1.y1 = y1;

DibuixaPoligon(pol,6);
Finestra(&window1,2);

for(recta=0;recta<4;recta++)
{
last=0;
s=(pol->p[(pol->n)-1]);
for(vertex=0;vertexn;vertex++)
{
anterior=dintre(s.x,s.y,&window1,recta);
actual=dintre(pol->p[vertex].x,pol->p[vertex].y,&window1,recta);

if (anterior==1 && actual==1) /*s i p a dintre => fikar p a tmp*/
{
tmp.p[last].x=pol->p[vertex].x;
tmp.p[last].y=pol->p[vertex].y;
last++;
}

else if(anterior==1 && actual==0) /*s->adintre i p->afora => interseccio
a tmp*/
{ interseccio(&s,&pol->p[vertex],&window1,recta);
tmp.p[last].x=s.x;
tmp.p[last].y=s.y;
last++;
}

else if(anterior==0 && actual==1) /*s->afora i p->adintre =>
interseccion i p a tmp*/
{
interseccio(&s,&pol->p[vertex],&window1,recta);
tmp.p[last].x=s.x;
tmp.p[last].y=s.y;
last++;
tmp.p[last].x=pol->p[vertex].x;
tmp.p[last].y=pol->p[vertex].y;
last++;
}
s=(pol->p[vertex]);
}
alliberar_poligon(pol);
if (last==0){/*Es por si al recortar da un poligono vacio*/
printf("Poligon inexistent");
exit(1);
}
pol->p=(Punt *)malloc(sizeof(Punt)*(last) );
if(pol->p==NULL) {printf("RAM2 out");exit(0);}
pol->n=last;
pol->color=tmp.color;
for(i=0;in;i++)
{ pol->p[i].x=tmp.p[i].x;
pol->p[i].y=tmp.p[i].y;
}

}
alliberar_poligon(&tmp);
DibuixaPoligon(pol,4);
getch();
cleardevice();
DibuixaPoligon(pol,4);
getch();
}

float pendent(int s0,int s1,int p0,int p1)
{
if(s0==p0) return(0);
else return( (float)(s1-p1) / (float)(s0-p0) );
}


void llavor_millorat(int x0,int y0,Poligon * pol,int color)
{
int cont_e,cont_d,color_ini;
Punt *s=NULL;
Pila *stack=NULL;

s=(Punt *)malloc(sizeof(Punt));
s->x=x0;
s->y=y0;

color_ini=getpixel(x0,y0);
DibuixaPoligon(pol,4);
setcolor(color);
Push(&stack,*s);

while(stack!=NULL)
{ *s=Pop(&stack);
cont_e=s->x; cont_d=s->x;

vei(&cont_e,s->y,color_ini,-1);
vei(&cont_d,s->y,color_ini,1);
line(cont_e,s->y,cont_d,s->y);
if( (s->y>=0) && (s->y<=getmaxy()) ){
lineas_adjacents(cont_e,cont_d,(s->y)-1,&stack,color_ini);
lineas_adjacents(cont_e,cont_d,(s->y)+1,&stack,color_ini);
}
}
free(s);
}

void lineas_adjacents(int xe,int xd,int y,Pila **stack,int color)
{
int out,axx,ayy;
Punt tmp;

out=xe;
while(out<=xd)
{ getpixel(out,y);
if( getpixel(out,y)==color )
{ vei(&out,y,color,1);
tmp.x = out;
tmp.y = y;
Push(&(*stack),tmp);
out++;
} else out++;
}
}

void Finestra(Xwindow *wind,int color)
{
setcolor(color);
rectangle(wind->x0,wind->y0,wind->x1,wind->y1);
}

void DibuixaPoligon(Poligon *poli,int color)
{
int tmp,tmp2;

tmp2=getcolor();
setcolor(color);
for(tmp=0;tmp<(poli->n)-1;tmp++)
line(poli->p[tmp].x,poli->p[tmp].y,poli->p[tmp+1].x,poli->p[tmp+1].y);
line(
poli->p[(poli->n)-1].x,poli->p[(poli->n)-1].y,poli->p[0].x,poli->p[0].y);
setcolor(tmp2);
}

int dintre (int x0,int y0,Xwindow *fines,int codig)
{ /* 0=arriba 1=derecha 2=abajo 3=izquierda */

if(codig==0)
{ if ( (y0) > (fines->y0) ) return 1;
else return 0;}

if(codig==1)
{ if ( (x0) < (fines->x1) ) return 1;
else return 0;}

if(codig==2)
{ if ( (y0) < (fines->y1) ) return 1;
else return 0;}

if(codig==3)
{ if ( (x0) > (fines->x0) ) return 1;
else return 0;}
return 0;
}

Pila* Crear_node()
{
Pila *aux=(Pila *)malloc(sizeof(Pila));
if(aux==NULL)
{ printf("No hi ha memoria RAM lliure disponible...\n");
getche();
exit(1);
}
return aux;
}

void Push(Pila **cab,Punt s)
{
Pila *aux=Crear_node();
aux->p->x=s.x;
aux->p->y=s.y;

if(cab==NULL) aux->anterior=NULL;
else
{ aux->anterior=*cab;
*cab=aux;}
}

Punt Pop(Pila **cab)
{
Pila *aux;
Punt s;
//s=(Punt *)malloc(sizeof(Punt));

if(*cab==NULL)
printf("Error: pila buida\n");
else
{ aux=*cab;
*cab=(*cab)->anterior;
s.x=aux->p->x;
s.y=aux->p->y;
free(aux);
}

return s;
}

void interseccio(Punt *s, Punt *p, Xwindow *wind,int recta)
{
float x_one=0, y_one=0;
Punt *intersec;

if(recta==0)
//calcula_int();
{ if(s->x==p->x)
{ x_one = p->x;
y_one = wind->y0;
}
else
{ x_one = p->x + (float)(wind->y0 - p->y) * pendent(s->y,s->x,p->y,p->x);
y_one = wind->y0;
}
}

if(recta==1)
{ y_one = p->y + (float)(wind->x1 - p->x) * pendent(s->x,s->y,p->x,p->y);
x_one = wind->x1;
}

if(recta==2)
{ if(s->x==p->x)
{ x_one = p->x;
y_one = wind->y1;
}
else
{ x_one = p->x + (float)(wind->y1 - p->y) * pendent(s->y,s->x,p->y,p->x);
y_one = wind->y1;
}
}

if(recta==3)
{ y_one = p->y + (float)(wind->x0 - p->x) * pendent(s->x,s->y,p->x,p->y);
x_one = wind->x0;
}

s->x=(int)(x_one+0.5);
s->y=(int)(y_one+0.5);


}

void vei(int *x,int y,int color_a,int suma)
{ while( (getpixel(*x,y)==color_a)&&((*x)<=getmaxx())&&((*x)>=0) )
{ (*x)=(*x)+suma; }
(*x)=(*x)-suma;
}

void emplenat_Y_X(Poligon * pol){
Costat **TC,*LCA=NULL,*aux;
int y_max=0,y_min=getmaxy(),i,out=0;

DibuixaPoligon(pol,1);
setcolor(14);
Y_max_min(&y_max, &y_min, pol);
TC=crear_TC(pol,y_max,y_min);
for(i=0;i {
if(TC[i])
afegir_costats_LCA(TC[i],&LCA);
/* if((i)==190){
aux=LCA;
while(aux){
printf(" %f %f %d\n",aux->x,aux->dx,aux->ymax);
aux=aux->seg;
}
printf("\n");
}*/
LCA=ordenar_LCA(LCA);
/* if((i)==190){
aux=LCA;
while(aux){
printf(" %f %f %d\n",aux->x,aux->dx,aux->ymax);
aux=aux->seg;
}
printf("\n");
}*/
pintar(LCA,i+y_min);
do{
out=eliminar_lados_LCA(&LCA,i+y_min);
}while(out);
/* if((i)==189){
aux=LCA;
while(aux){
printf(" %f %f %d\n",aux->x,aux->dx,aux->ymax);
aux=aux->seg;
}
printf("\n");
}*/
actualizar_LCA(&LCA);
}
if(!alliberar_TC(TC))
printf("Error al liberar la TC");
}

void afegir_costats_LCA(Costat* lista,Costat** LCA){
Costat *auxiliar=*LCA;


if(*LCA){/*La LCA tiene como minimo un campo*/
while(auxiliar->seg) auxiliar=auxiliar->seg;
auxiliar->seg=lista;
}else/*La LCA esta a vacia*/
*LCA=lista;

}

Costat *ordenar_LCA(Costat *llista){
Costat *llista1, *llista2;

if (!(llista->seg) || !(llista))
return llista;
llista1 = llista;
llista2 = llista1->seg->seg;
while (llista2 && llista2->seg ) {
llista1 = llista1->seg;
llista2 = llista2->seg->seg;
}
llista2 = llista1->seg;
llista1->seg = NULL;
llista1 =ordenar_LCA(llista);
llista2 =ordenar_LCA(llista2);
llista = mezclar_listas(llista1, llista2);
return llista;
}

Costat* mezclar_listas(Costat* lista1,Costat* lista2){
Costat *lista, *auxiliar;

if (lista1->x > lista2->x){
lista= lista2;
lista2 = lista2->seg;
}else{
lista = lista1;
lista1 = lista1->seg;
}
auxiliar = lista;
while (lista1 && lista2) {
if (lista1->x > lista2->x) {
auxiliar->seg = lista2;
lista2 = lista2->seg;
}else {
auxiliar->seg = lista1;
lista1 = lista1->seg;
}
auxiliar = auxiliar->seg;
}
if (lista1)
auxiliar->seg = lista1;
else if (lista2)
auxiliar->seg = lista2;

return lista;
}

int eliminar_lados_LCA(Costat** llista,int y_actual){
Costat* auxiliar=*llista,*temporal;
int salida=0;

if(auxiliar->ymax<=y_actual){
temporal=*llista;
(*llista)=(*llista)->seg;
free(temporal);
salida=1;
}else{
while(auxiliar){
if(auxiliar->seg->ymax<=y_actual){
temporal=auxiliar->seg;
if(auxiliar->seg->seg)
auxiliar->seg=auxiliar->seg->seg;
else
auxiliar->seg=NULL;
free(temporal);
salida=1;
}
auxiliar=auxiliar->seg;
}
}
return(salida);
}
void actualizar_LCA(Costat** llista){
Costat *auxiliar=*llista;

while(auxiliar){
auxiliar->x+=auxiliar->dx;
auxiliar=auxiliar->seg;
}
}

void pintar(Costat* lista,int posicion_y){
Costat *auxiliar=lista;
while(auxiliar){
line((int)(auxiliar->x+0.5),(int)(posicion_y+0.5),(int)(auxiliar->seg->x+0.5),(int)(posicion_y+0.5));
auxiliar=auxiliar->seg->seg;
}
}

void Y_max_min(int *max,int *min,Poligon *pol){
int cont;

*max=0;
*min=getmaxy();

for(cont=0;contn;cont++){
if( *max <>p[cont].y){/*Saca la y maxima del poligon*/
*max=pol->p[cont].y;
}
if(*min>pol->p[cont].y){/*Saca la y minima del poligon*/
*min=pol->p[cont].y;
}
}
}

Costat** crear_TC(Poligon *pol,int max,int min){
Costat **taula;
Costat *A,*B,*inicio;
unsigned int y_min_lado,vertex=1;
long int dyA,dyB,dyI;

taula= (Costat**) malloc(sizeof(Costat*) * (max-min));
iniciar_a_null(taula,max-min);
A=crear_lado(pol, &vertex, &y_min_lado, &dyA);
inicio=crear_lado(pol, &vertex, &y_min_lado, &dyI);
guardar_TC(taula, A, y_min_lado-min);
vertex++;
while((vertex<=pol->n) && (B=crear_lado(pol, &vertex, &y_min_lado, &dyB))){
if(dyB * dyA>=0){/*Mismo signo, sacamos un punto a B*/
if(dyB>0){/*Baja*/
y_min_lado++;
(B->x)+=(B->dx);
}else{/*Sube*/
(B->ymax)--;
}
}
if(vertex==pol->n){
if(dyB * dyI>=0){/*Mismo signo, sacamos un punto a B*/
if(dyI>0){/*Baja*/
(B->ymax)--;
}else{/*Sube*/
y_min_lado++;
(B->x)+=(B->dx);
}
}
}
guardar_TC(taula,B,y_min_lado-min);
dyA=dyB;
A=B;
vertex++;
}
if (inicio)
free(inicio);
return(taula);
}
void iniciar_a_null(Costat **tabla,unsigned int valor)
{ unsigned int cont=0;
for(cont=0;cont /*Recorremos toda la TC poniendo sus punteros a NULL*/

}

Costat* crear_lado(Poligon *pol,unsigned int *vertice,unsigned int *min,long
int *dy){

Costat *lado;
float m;

if(*verticen){/*Del 1er vertice al penultimo*/
m=pendent(pol->p[*vertice].x,pol->p[*vertice].y,pol->p[*vertice-1].x,pol->p[*vertice-1].y);
if(pol->p[*vertice-1].y!=pol->p[*vertice].y){/*Mira si es horizontal*/
lado=(Costat*) malloc(sizeof(Costat));
lado->seg=NULL;
if(m==0)
lado->dx=0;
else
lado->dx=1.0/m;
if(pol->p[*vertice-1].yp[*vertice].y){/*Baja*/
lado->x=pol->p[*vertice-1].x;
lado->ymax=pol->p[*vertice].y;
*min=pol->p[*vertice-1].y;
}else{/*Sube*/
lado->x=pol->p[*vertice].x;
lado->ymax=pol->p[*vertice-1].y;
*min=pol->p[*vertice].y;
}
*dy=(pol->p[*vertice].y)-(pol->p[*vertice-1].y);
}else{/*Es horizontal*/
(*vertice)++;
lado=crear_lado(pol,vertice,min,dy);

}

}else{/*El ultimo vertice es pasado de parametro*/
m=pendent(pol->p[0].x,pol->p[0].y,pol->p[*vertice-1].x,pol->p[*vertice-1].y);
if(pol->p[*vertice-1].y!=pol->p[0].y){/*Para saber si es horizontal*/
lado=(Costat*) malloc(sizeof(Costat));
lado->seg=NULL;
if(m==0)
lado->dx=0;
else
lado->dx=1.0/m;
if(pol->p[*vertice-1].yp[0].y){/*Baja*/
lado->x=pol->p[*vertice-1].x;
lado->ymax=pol->p[0].y;
*min=pol->p[*vertice-1].y;
}else{/*Sube*/
lado->x=pol->p[0].x;
lado->ymax=pol->p[*vertice-1].y;
*min=pol->p[0].y;
}
*dy=(pol->p[0].y)-(pol->p[*vertice-1].y);
}else lado=NULL; /*Es horizontal y es el ultimo lado*/

}
return(lado);
}

void guardar_TC(Costat** TC, Costat* lado,unsigned int y_min){
Costat* aux=NULL;
if(!(TC[y_min])){/*La lista de este punto esta vacia*/
TC[y_min]=lado;
}else{/*La lista de este punto tiene como minimo un lado*/
aux=TC[y_min];
while(aux->seg){
aux=aux->seg;
}
aux->seg=lado;
}
}
int alliberar_TC(Costat ** taula){
if (taula)
free(taula);
return(1);
}