Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-03-19 10:39:18 collisions polygones

fabrice54
membre
Date d'inscription: 2012-06-07
Messages: 242

collisions polygones



Bonjour.

Un petit problème pour résoudre la collision de polygones,j'ai vu qu'il fallait calculer le déterminant d'une matrice,mais je ne sais pas comment l'on trouve les vecteurs des polygones qui vont entrés en collision.

merci.

Code (P5) :

int nb=20;
Polygones[] polygones=new Polygones[nb];
void setup(){
  size(900,700);
  for(int i=0;i<nb;i++)
  {
    polygones[i]=new Polygones();
  }
}
  void draw(){
    background(50,0,100,5);
    for(int i=0;i<nb;i++)
    {
       polygones[i].deplacement();
    polygones[i].polygones();
       polygones[i].rebond_mur();
    }
    for(int i=0;i<nb;i++)
    {
      for(int j=i+1;j<nb;j++)
      {
        polygones[i].collision(polygones[j]);
      }
    }
  }
  class Polygones{
    PVector position;
    PVector deplacement;
    float nb_face;
    float rayon;
    color couleur;
  
    Polygones(){
      position=new PVector(random(width),random(height));
      deplacement=new PVector(random(-1,2),random(-2,3));
      nb_face=random(3,8);
      rayon=random(20,60);
  couleur=color(random(0,255),random(0,255),random(0,255));
    }
    void deplacement(){
      position.add(deplacement);
    }
    
    void polygones(){
      float angle=TWO_PI/nb_face;
      beginShape();
     
      for(float a=0;a<TWO_PI;a+=angle)
      {
        float sx=position.x+cos(a)*rayon;
        float sy=position.y+sin(a)*rayon;
        fill(couleur);
        vertex(sx,sy);
      }
      endShape(CLOSE);
      
    }
    
    void rebond_mur(){
      
      if(position.x<0+rayon||position.x>width-rayon)
      {
      deplacement.x *=-1;
      }
      if(position.y<0+rayon||position.y>height-rayon)  
      {
           deplacement.y *=-1;
      }
    }
    void collision(Polygones j){
      float distance=position.dist(j.position);
      if(distance<=rayon)
      {
      
     deplacement.x=deplacement.x*-1;
       deplacement.y=deplacement.y*-1;    
    
  }
    }
  }

Hors ligne

 

#2 2014-03-19 12:22:23 Re : collisions polygones

Mushussu
membre
Lieu: Orléans
Date d'inscription: 2012-05-24
Messages: 802

Re: collisions polygones



Comme tu parles de matrice sans donner tes références, il est difficile de pouvoir t'aider.
Cependant, quelques remarques sur ton code il est étrange que le nombre de face soit un flot et non un entier.
D'autre part, pour la détection de collision basique :
distance <= rayon + j.rayon

Sinon de petits liens:
http://www.codeproject.com/Articles/155 … -Detection

http://www.geometrictools.com/Documenta … ngAxes.pdf

Il existe aussi, mais je pense que tu le sais déjà deux librairies Processing pour les collisions etc.
Box2D et toxiclibs

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2025