Blizter Banni(e)
Messages : 2002
| Sujet: Script collision entre deux lignes Ven 18 Mai 2007 - 17:57 | |
| Bonjour j'ai fait un script qui permet de detecter si deux ligne se croisent. - Citation :
- x1=argument0;y1=argument1;x2=argument2;y2=argument3;//ligne 1
x3=argument4;y3=argument5;x4=argument6;y4=argument7;//ligne 2 if(x1>x2)//On met tout à l'endroit. { temp=x2; x2=x1; x1=temp; temp=y2; y2=y1; y1=temp; } //--> Afin de sauver un peu de calcul aa=point_direction(x1,y1,x2,y2); bb=point_distance(x1,y1,x3,y3); cc=point_distance(x1,y1,x4,y4); //<-- emergency=0; if(x2!=x1) { temp11=(y2-y1)/(x2-x1); } else { emergency=1; } temp1=aa-point_direction(x1,y1,x3,y3); valInitialeY=sin(degtorad(temp1))*bb; valInitialeX=cos(degtorad(temp1))*bb; temp2=(360-aa)+point_direction(x1,y1,x4,y4); valFinaleY=sin(degtorad(temp2))*cc; valFinaleX=cos(degtorad(temp2))*cc; if(emergency!=1) { if(valFinaleX-valInitialeX!=0) { tauxVar=(abs(valFinaleY)+abs(valInitialeY))/(valFinaleX-valInitialeX); } else { tauxVar=100000000; } inv=0; if(((x4-x3)*temp11)+y3<y4) { tauxVar=-tauxVar; inv=1; } zero=(valInitialeY/tauxVar)+valInitialeX; } else//Emergency : Au cas ou la ligne 1 est verticale, on évite la division par zéro. { if(y4!=y3 && x4!=x3) { zero=(x4-x3)/(y4-y3); zero=-(x3-x1)/zero; if(y1<y2) { zero+=y3-y1; } else { zero+=y3-y2; } zeroX=x1+lengthdir_x(zero,aa); zeroY=y1+lengthdir_y(zero,aa); if((zeroY>y1 && zeroY<y2) || (zeroY<y1 && zeroY>y2)) { if((x3<=x1 && x4>=x1) || (x4<=x1 && x3>=x1)) { return 1; } } return 0; } else if(y4=y3) { if((y3<y1 && y3>y2) || (y3>y1 && y3<y2)) { if((x3<=x1 && x4>=x1) || (x4<=x1 && x3>=x1)) { return 1; } } return 0; } else if(x4=x3) { if(x1!=x3) { return 0; } else if(((y3<y1 && y3>y2) || (y3>y1 && y3<y2)) || ((y4<y1 && y4>y2) || (y4>y1 && y4<y2)) || ((y3<y1 && y4>y2) || (y3>y2 && y4<y1))) { return 1; } else { return 0; } } } zeroX=x1+lengthdir_x(zero,aa); zeroY=y1+lengthdir_y(zero,aa); //-----// //Lignes explicatives//Décommenter pour avoir une idée du fonctionnement du script// //draw_line_color(x3+lengthdir_x(valInitialeX,point_direction(x3,y3,x1,y1)+temp1),y3+lengthdir_y(valInitialeX,point_direction(x3,y3,x1,y1)+temp1),x3+lengthdir_x(point_distance(x1,y1,x2,y2)-valInitialeX,point_direction(x3,y3,x1,y1)+temp1+180),y3+lengthdir_y(point_distance(x1,y1,x2,y2)-valInitialeX,point_direction(x3,y3,x1,y1)+temp1+180),c_blue,c_blue); //draw_line_color(x4,y4,x3+lengthdir_x(valFinaleX-valInitialeX,point_direction(x3,y3,x1,y1)+temp1+180),y3+lengthdir_y(valFinaleX-valInitialeX,point_direction(x3,y3,x1,y1)+temp1+180),c_blue,c_blue); //draw_circle_color(x1+lengthdir_x(zero,point_direction(x1,y1,x2,y2)),y1+lengthdir_y(zero,point_direction(x1,y1,x2,y2)),8,c_green,c_green,0); //draw_text(10,10,"tauxVar: "+string(tauxVar)); //draw_text(10,25,"zero: "+string(zero)); //-----// if(zeroX>x1 && zeroX<x2) { fs1=zeroY+lengthdir_y(valInitialeY,aa-90); fs2=zeroY+lengthdir_y(valFinaleY,aa+90); //-----// //Lignes explicatives//Décommenter pour avoir une idée du fonctionnement du script// //draw_circle(zeroX+lengthdir_x(valInitialeY,aa-90),fs1,5,1); //draw_circle(zeroX+lengthdir_x(valFinaleY,aa+90),fs2,5,1); //-----// if(valInitialeY<0) { fs1-=(abs(lengthdir_x(valInitialeY,aa-90))*aa)/(90-aa); } else { fs1+=(abs(lengthdir_x(valInitialeY,aa-90))*aa)/(90-aa); } if(valFinaleY>0) { fs2-=(abs(lengthdir_x(valFinaleY,aa+90))*aa)/(90-aa); } else { fs2+=(abs(lengthdir_x(valFinaleY,aa+90))*aa)/(90-aa); } //-----// //Lignes explicatives//Décommenter pour avoir une idée du fonctionnement du script// //draw_circle(zeroX,fs1,5,1); //draw_circle(zeroX,fs2,5,1); //-----// if((zeroY<fs1 && zeroY>fs2) || (zeroY>fs1 && zeroY<fs2)) { return 1; } } return 0;
Voici le lien pour télécharger l'exemple : http://www.zshare.net/download/lineintersect-gm6.htmlAttention : Dans l'exemple il y a 2 scripts bonus qui servent a renvoyé l'emplacement de la collision. |
|
Blizter Banni(e)
Messages : 2002
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 0:37 | |
| Script très populaire lol. |
|
Ablationer Administrateur
Messages : 14995 Localisation : QuébeCanada Projet Actuel : pas trop mourir
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 3:08 | |
| ça te surprend? _________________ Yo this is stven, White race. The hs diploma i'm holding in this pic is usually there, my principal put it there in 2008. I'm easily startled by coarse fabrics. only one who stayed in the Burger King Kid's Club after they started charging dues. It's called having a fkng job. All clothes found on google except this crown which doesn't say who designed it |
|
Blizter Banni(e)
Messages : 2002
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 3:50 | |
| |
|
xenamart Utilisateur confirmé: Rang ***
Messages : 554 Localisation : sur la toile, entre google et le cbna Projet Actuel : Rufal
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 9:54 | |
| Ta passé combien de temps dessus ?? |
|
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 11:19 | |
| ouah... très fort, et surement utile, mais pourait ti donner un exemple d'utilisation? Je vois pas là, et j'ai peur de passer à coté d'un truc. _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
Blizter Banni(e)
Messages : 2002
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 18:49 | |
| collision entre 2 polygones. |
|
M@d_Doc Modérateur
Messages : 6600 Localisation : 47°44'8.04 Projet Actuel : aucun
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 18:49 | |
| ah ouais j'y avais pas pensé. Ca parait beaucoup plus utile d'un coup ^^ _________________ Tous les icones de gm utilisables sur le cbna ICI |
|
Invité Invité
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 18:56 | |
| Comme Daminetreg l'avait dit quelque part, si on ne félicite pas les bons programmeurs ils ne feront plus rien, et donc malgré le fait que ce script ne soit pas utile dans l'immédiat mais vu qu'il reste très fort, et que c'est bien trop balèze pour moi, par les pouvoirs qui me sont conférés je dis bravo à Blitzer |
|
Blizter Banni(e)
Messages : 2002
| Sujet: Re: Script collision entre deux lignes Jeu 28 Juin 2007 - 19:06 | |
| |
|
Contenu sponsorisé
| Sujet: Re: Script collision entre deux lignes | |
| |
|