IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Test de collisions de voitures par segment de graphe orienté


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 728
    Par défaut Test de collisions de voitures par segment de graphe orienté
    Bonjour,

    Je cherche à optimiser un algorithme de detection de collision de voitures sur route (éviter qu'une voiture qui précède une autre lui rentre dedans). Sans prendre en compte les intersections.
    Soit un graphe orienté G composés de Segments[] et Noeuds[].
    Soit P le nombre de segments avec P <= 100
    Chaque Segment est matérialisé par une spline.

    Soit N le nombre total de voitures Voiture avec N <= 5000
    Soit n le nombre max de voiture par segment, avec n <=50.

    Voiture.SplineRatio = 0 si la voiture est au début de la spline, Voiture.SplineRatio = 1, si elle est en fin de spline, Voiture.SplineRatio = 0.333 si la voiture est au premier tiers de la spline , etc ...

    Nom : image_fofo.jpg
Affichages : 228
Taille : 79,0 Ko

    Je pensais, en temps réel, stocker chaque pointeur de voiture présente sur un Segment dans cette propriété:
    Segment.Voitures[]
    Quand une voiture quitte un segment on enlève le dernier élément du tableau Segment.Voitures[], et quand elle arrive sur ce segment on ajoute son pointeur à l'index zero de ce même tableau. Ainsi, automatiquement Segment.Voitures[] est trié par Voiture.SplineRatio croissant.

    Faire un test brut de collision aurait la complexité maximale C1 = N*N,
    alors que faire un test de collision par segment et par Segment.Voitures[] trié par Voiture.SplineRatio croissant, aurait la complexité C2 = P *(n-1)
    Avec C1Max = 25000000
    et C2Max = 4900

    Il n'y a vraiment pas photo, mais est ce que vous voyez une amélioration possible ?

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 634
    Par défaut
    Bonjour,

    Le test de collision ne peut se limiter à un segment. Il faut au moins regarder le segment d'après (voir plus s'il y a un embranchement). La collision peut avoir lieu avec celle qui précède mais c'est son problème .

    Comme je l'a déjà évoqué dans un autre fil, la distance peut être simplifiée en supposant le rayon de courbure raisonnable.

    Sur un même segment Sn de longueur Ln, la distance entre 2 véhicules a et b (b derrière a : ratiob < ratioa) est approximativement (ratioa - ratiob) * Ln.

    Avec a et b sur deux segments de suite, Lm et Ln, ce n'est guère plus compliqué : ratioa*Lm + Ln - ratiob*Ln.

    Il y a sans doute mieux, mais cela me semble déjà intéressant. De plus on peut aisément gérer des véhicules de longueurs différentes (la position est celle de l'avant de chaque).

    Salutations

Discussions similaires

  1. Test de collision
    Par ZouBi dans le forum C++
    Réponses: 8
    Dernier message: 28/02/2008, 15h17
  2. [MySQL] Redirection après test d'un mot saisi par l'internaute
    Par olgga dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/01/2007, 14h32
  3. requête access (test d'une valeur entrée par l'utilisateur)
    Par ben5985 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 30/11/2006, 08h39
  4. test dans un fichier ligne par ligne
    Par lobiman dans le forum Langage
    Réponses: 9
    Dernier message: 17/08/2006, 10h57
  5. Test de collision en 2D
    Par GLDavid dans le forum OpenGL
    Réponses: 5
    Dernier message: 12/02/2004, 10h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo