Nombre del creador: Alfonsos1
Breve descripci?n de su funci?n: dibuja un poligono de hasta 8 lados
Versi?n GM utilizada: :GM8:
Argumentos:
Codigo de script:
Ejemplos de uso:
Poligono de 8 lados:
poligono(250,250,200,300,200,275,150,275,150,200,175,225,200,225,225,200);
Poligono de 5 lados:
poligono(200,200,250,250,300,200,300,300,200,300,-1,-1,-1,-1,-1,-1);
IMPORTANTE: devido a que el script hace uso de la recurci?n, el nombre del script deve ser si o si "poligono".
Breve descripci?n de su funci?n: dibuja un poligono de hasta 8 lados
Versi?n GM utilizada: :GM8:
Argumentos:
Citaren caso de querer dibujar un poligono de menos de 8 lados dejar los ultimos argumentos con un valor de -1
x1
y1
x2
y2
x3
y3
x4
y4
x5
y5
x6
y6
x7
y7
x8
y8
Codigo de script:
Código [Seleccionar]
verx[0] = argument0;
verx[1] = argument2;
verx[2] = argument4;
verx[3] = argument6;
verx[4] = argument8;
verx[5] = argument10;
verx[6] = argument12;
verx[7] = argument14;
very[0] = argument1;
very[1] = argument3;
very[2] = argument5;
very[3] = argument7;
very[4] = argument9;
very[5] = argument11;
very[6] = argument13;
very[7] = argument15;
if(verx[0] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 0;
if(verx[1] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 1;
if(verx[2] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 2;
if(verx[3] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 3;
if(verx[4] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 4;
if(verx[5] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 5;
if(verx[6] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 6;
if(verx[7] = max(verx[0],verx[1],verx[2],verx[3],verx[4],verx[5],verx[6],verx[7])) A = 7;
puntos = 8;
if(verx[7] = -1) puntos -= 1;
if(verx[6] = -1) puntos -= 1;
if(verx[5] = -1) puntos -= 1;
if(verx[4] = -1) puntos -= 1;
if(verx[3] = -1) puntos -= 1;
vasio = 0;
while(!vasio)
{
m1 = (very[(A-1+puntos) mod puntos]-very[(A+puntos) mod puntos])/(verx[(A-1+puntos) mod puntos]-verx[(A+puntos) mod puntos]+0.0000000001);
n1 = very[(A-1+puntos) mod puntos]-m1*verx[(A-1+puntos) mod puntos];
if( verx[(A+1+puntos) mod puntos]*m1+n1>very[(A+1+puntos) mod puntos]) h1 = 1;
else h1 = -1;
m2 = (very[(A-1+puntos) mod puntos]-very[(A+1+puntos) mod puntos])/(verx[(A-1+puntos) mod puntos]-verx[(A+1+puntos) mod puntos]+0.0000000001);
n2 = very[(A-1+puntos) mod puntos]-m2*verx[(A-1+puntos) mod puntos];
if(verx[(A+puntos) mod puntos]*m2+n2>very[(A+puntos) mod puntos]) h2 = 1;
else h2 = -1;
m3 = (very[(A+puntos) mod puntos]-very[(A+1+puntos) mod puntos])/(verx[(A+puntos) mod puntos]-verx[(A+1+puntos) mod puntos]+0.0000000001);
n3 = very[(A+puntos) mod puntos]-m3*verx[(A+puntos) mod puntos];
if(verx[(A-1+puntos) mod puntos]*m3+n3>very[(A-1+puntos) mod puntos]) h3 = 1;
else h3 = -1;
vasio = 1;
for(pnt=0;pnt<puntos;pnt+=1)
{
if(pnt != (A-1+puntos) mod puntos && pnt != (A+puntos) mod puntos && pnt != (A+1+puntos) mod puntos)
{
if((verx[pnt]*m1+n1)*h1>=very[pnt]*h1+0.0000001 && (verx[pnt]*m2+n2)*h2>=very[pnt]*h2+0.0000001 && (verx[pnt]*m3+n3)*h3>=very[pnt]*h3+0.0000001)
{
vasio = 0;
}
}
}
if(!vasio) A = (A+1+puntos) mod puntos;
}
draw_triangle(verx[(A-1+puntos) mod puntos],very[(A-1+puntos) mod puntos],verx[(A+puntos) mod puntos],very[(A+puntos) mod puntos],verx[(A+1+puntos) mod puntos],very[(A+1+puntos) mod puntos],0);
for(ind=A;ind<puntos;ind+=1)
{
verx[ind] = verx[(ind+1) mod puntos];
very[ind] = very[(ind+1) mod puntos];
}
verx[puntos-1]=-1;
very[puntos-1]=-1;
if(puntos>3) poligono(verx[0],very[0],verx[1],very[1],verx[2],very[2],verx[3],very[3],verx[4],very[4],verx[5],very[5],verx[6],very[6],verx[7],very[7])
Ejemplos de uso:
Poligono de 8 lados:
poligono(250,250,200,300,200,275,150,275,150,200,175,225,200,225,225,200);
Poligono de 5 lados:
poligono(200,200,250,250,300,200,300,300,200,300,-1,-1,-1,-1,-1,-1);
IMPORTANTE: devido a que el script hace uso de la recurci?n, el nombre del script deve ser si o si "poligono".