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

C# Discussion :

Dessiner des routes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut Dessiner des routes
    Bonjour

    Petites questions simples !!!

    J'ai un filaire de route de base (suite de points par exemple)

    Comment pourrais-je faire pour dessiner ma route, c'est à dire à partir du filaire, tirer les 2 bords de la route (je connais la largeur) ?

    Pour une ligne droite, je sais le faire, mais pour des objets circulaires, arc de cercle, etc... comment faire ?

    J'ai bien une solution de base qui serait de décomposer chaque objet graphique en suite de ligne (avec le graphicPath, cela se fait très simplement), mais j'aurais aimé savoir si il y avait une méthode plus "propre" ?

    (autre solution, faire un draw dans une bitmap avec une couleur de Pen correspondant à la largeur de ma route, et ensuite, recupérer par analyse de couleur les contours, mais bon... yaurait pas plus "simple" ou "plus" propre ?

    Merci d'avance !

  2. #2
    Membre Expert Avatar de LooserBoy
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 1 085
    Par défaut
    Il y a une possibilité "propre": l'homothétie

    Bon, c'est des mathématiques, donc pas forcément digeste pour tout le monde, mais ça marche à tout les coups.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    drawcurve je crois

    enfin y a une fonctions qui à partir d'une liste de system.Drawing.point dessine des arrondis tout seul entre les points
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    tient, exacte...

    J'avais oublié l'homothétie... sauf que cela ne marche pas forcément bien pour le tracé d'une route

    (notamment par rapport à la conservation des proportions dans des virages ou tu aurais du repliement de courbe)

    Sinon, j'ai utilisé une solution simple à base de segment, et de déplacement
    (enfin, translation de segment )

  5. #5
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut TheMonz

    C'est un sujet qui m'interesse particulierement je suis dedans aussi !
    Actuellement j'ai deux pistes

    1- D'abord tracer une route noire plus large de deux pixels, ensuite tracer dans la couleur voulue deux pixel en moins

    2- Une autre solution (paradoxalement sans doute plus legere que la premiere en terme de calcul) :
    a) Tracer les routes dans l'epaisseur voulue sur un fond de couleur C
    b) Parcourir le bitmap pour generer les contours par transition C, Cx

    C'est un sujet que je trouve tres intéressant et un bel exemple est de regarder MapSource de Garmin qui depuis la version 5.0 a ajouté ces contours (avant c'etait du fil de fer) : on sent que c'est un tout petit peu plus lent mais infiniment plus joli et agréable a l'oeil.

    Je serais heureux de partager des expèriences avec toi dans ce domaine.

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    sans problème...

    En fait, pour resoudre mon problème, j'ai fait ainsi :

    Tu as une courbe défini par des points....

    Je prends 2 points consécutifs.. je calcul la normale au segment fait par ces 2 points...

    Je calcule les 2 points équivalent mais distant de l'offset que je veux

    une fois que j'ai mes 2 nouveaux points, je calcule la meme chose en prenant le segment suivant pour ma courbe .. j'obtiens 2 nouveaux points.. et là,
    je fais l'intersection de ces 2 nouveaux points...

    Ainsi, dès que j'ai des gros changements de direction, ma distance reste croissante...

    ET au final, j'arrive à dessiner de "superbes" routes...

    Pour toute courbe ensuite basé sur les GraphicsPath du framework, je suis capable en appelant les méthodes Flatten() et la propriété PathPoints d'obtenir l'ensemble des points composants la courbe, et donc de faire les actions suivantes :

    1 : Mesurer longueur de n'importe qu'elle courbe
    2 : Me déplacer de la distance que je veux sur cette courbe
    3 : Construire la courbe "intérieure" ou "extérieure" à cette courbe

    Après, je ne me suis pas encore penché sur les problématiques de jonctions, rond point avec intersection, divergence ou convergence de voie.. je laisse cela à mon stagiaire maintenant que j'ai validé le concept de base (théoriquement et par code)...

    Par contre, je t'ai donné la théorie "précise" de comment je faisais, je prefere ne pas te "filer" le code dans la mesure ou cela fait partie de ce que je réalise dans mon boulot ;(

    Désolé !!!

    PAr contre, je peux aider si tu as des questions plus précises

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    euh... j'ai peut-être rien compris au problème, mais il suffit pas d'utiliser un Pen plus épais ?

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,
    Citation Envoyé par theMonz31 Voir le message
    J'ai un filaire de route de base (suite de points par exemple)
    Pour ma culture générale, pourriez-vous me dire ce que c'est, à quoi ça sert et quel est le but à atteindre?
    Pour des non initiés le post n'est pas très compréhensible

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    La classe Pen a pas mal de propriétés qui doivent a priori permettre de régler ce problème. Je sais pas exactement laquelle (ou lesquelles) il faut utiliser, mais la propriété LineJoin (éventuellement associée à StartCap, EndCap, et MitterLimit) me semble assez prometteuse

    Decidement TomLev tu est l'encyclopédie de ce forum !


    Il y a certainement de quoi faire avec ces propriétes que je ne connaissais pas en tout cas c'est évidemment une piste a creuser

  10. #10
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    pour immobilis et les autres

    un filaire correspond à une suite de point pour définir une route

    Le filaire permet donc dans les SIG (Système informatique géographique) de positionner un point sur une route en fonction de sa distance par rapport à ce filaire

    Par contre, en fonction de la qualité de la base de données de filaire, une route, même comportant plusieurs voies peut etre modéliser qu'au travers d'un seul filaire (ce qui veut dire que la notion de sens (amont ou aval) n'est pas
    toujours simple à associer... et donc, pour du suivi de véhicule par GPS, peut s'avérer limité

    Mais bon, je ne vais peut-etre pas faire un "cours" sur les SIG et sur les systèmes de suivi de véhicule (notion de map matching, repositionnement, etc ... )

    A+

  11. #11
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Un peu comme les graphiques de nuages de points, non?
    Excel propose de tracer une ligne soit droite, logarithmique, etc.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    Decidement TomLev tu est l'encyclopédie de ce forum !
    Non, j'ai juste la doc MSDN sous la main

Discussions similaires

  1. [Graphic] Dessiner des hachures
    Par sylverspoon dans le forum 2D
    Réponses: 7
    Dernier message: 22/03/2006, 21h46
  2. dessiner des lignes "cliquables"
    Par r0d dans le forum Webdesign & Ergonomie
    Réponses: 14
    Dernier message: 21/03/2005, 15h02
  3. [Débutant] dessiner des carrés
    Par Dark-Lab dans le forum 2D
    Réponses: 13
    Dernier message: 27/08/2004, 10h50
  4. [Dessin]dessiner des graphes
    Par mial dans le forum 2D
    Réponses: 4
    Dernier message: 27/04/2004, 19h51
  5. dessiner des graphiques
    Par mial dans le forum 2D
    Réponses: 6
    Dernier message: 26/04/2004, 12h22

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