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

Graphisme Java Discussion :

créer des lignes


Sujet :

Graphisme Java

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut créer des lignes
    salut

    il y a des librairies qui pourrait faciliter la création de ligne?

    genre j'ai deux poins, je dessine une ligne... à partir d'un point de cette ligne, je dessine une ligne perpendiculaire

    merci

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Salut,

    Citation Envoyé par robert_trudel Voir le message
    il y a des librairies qui pourrait faciliter la création de ligne?
    Java2D non?

    Citation Envoyé par robert_trudel Voir le message
    genre j'ai deux poins, je dessine une ligne... à partir d'un point de cette ligne, je dessine une ligne perpendiculaire
    Si tu te limites à ça, Java2D + un produit scalaire ça suffira. Ca doit tenir en quelques lignes, pas besoin d'artillerie lourde.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 859
    Points
    22 859
    Billets dans le blog
    51
    Par défaut
    Voir les javadoc de :
    • Graphics.drawLine(int x1, int y1, int x2, int y2)
    • Line2D.Double
    • Line2D.Float
    • Graphics2D.draw(Shape s)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    1. prendre la valeur des deux points (p1,p2) que j'ai

    2. dessiner la ligne

    3. calculer un point à gauche de p1 -> p3

    4. trouver la formule y=mx+b


    5. m1*m2=-1, brancher le tout avec les valeur de p3 pour trouver y=mx+b

    ça me semble beaucoup d'opération pour une opération basique...

    déjà pour le numéro 3, je sais pas s'il y a une méthode pour faire ça... genre donne moi le point à x% ou bien x pixel de tel point...

  5. #5
    Expert confirmé
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Points : 4 539
    Points
    4 539
    Par défaut
    salut .
    je rajoute le fait de pouvoir utiliser l'algo de breseham

  6. #6
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par robert_trudel Voir le message
    ça me semble beaucoup d'opération pour une opération basique...
    pas à moi.

    Soit p1(x1,y1) et p2(x2,y2) les deux points définissant ta droite
    Tu prends p3 à d% de p1 sur p1p2, coordonnées:
    x3=(1-d)*x1+d*x2
    y3=(1-d)*y1+d*y2
    Tu calcules p4 "à gauche" de p1p3 avec (produit vectoriel 3D Z*p1p3):
    x4=-(y3-y1)
    y4=(x3-x1)
    Et voilà.
    Tu peux rajouter un coef ou une règle de 3 suivant si tu veux un segment, une droite, une demi-droite, etc



    Citation Envoyé par slim_java Voir le message
    je rajoute le fait de pouvoir utiliser l'algo de breseham
    je ne pense pas qu'il faille faire intervenir breseham ici. Breseham est un algo de tracé de segment, c'est déjà intégré dans Java2D
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 845
    Points : 22 859
    Points
    22 859
    Billets dans le blog
    51
    Par défaut
    Oui MAIS pour être un peu plus précis, Java2D peut également faire appel à la platforme sous-jacente (OpenGL, Direct3D) si elle dispose d'accélération plutôt qu'appeler son propre code de rendu. Et pour les lignes verticales ou horizontales avec le stroke et l'antialias par défaut *normalement* appeler drawLine() est plus rapide qu'appeler drawShape(s) car il n'y a alors pas de calcul de la forme a dessiner (la forme à dessiner est la forme retournée par les méthodes de l'interface Stroke).

    Donc bref faire des optimisations sur l'algo peut-être bien MAIS si ça se trouve les performances seront très variables d'un système à un autre en fonction des accélérations matérielles ou logicielles dispos, des pilotes d'affichage, de la version du JRE utilisée, etc... Donc pour les optimisations sur le rendu mieux vaut généralement (sauf besoin spécifique) aller voir du coté de l'algo de dessin (rendu par zones en tenant compte de l'intersection avec le clip, éviter de tout redessiner si ce n'est pas nécessaire, etc.) plutôt que de chercher à optimiser les primitives de rendu elles-mêmes sauf si vous crééz un nouveau type de Graphics pour un type de sortie non-supporées par les Graphics actuels qui peuvent être soit l'écran, l'imprimante, une image bitmap (ceux par défaut de la JVM) ou une image vectos (en utilisant certaines API externes pour supporter des formats d"image supplémentaires).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par plegat Voir le message
    pas à moi.

    Soit p1(x1,y1) et p2(x2,y2) les deux points définissant ta droite
    Tu prends p3 à d% de p1 sur p1p2, coordonnées:
    x3=(1-d)*x1+d*x2
    y3=(1-d)*y1+d*y2
    Tu calcules p4 "à gauche" de p1p3 avec (produit vectoriel 3D Z*p1p3):
    x4=-(y3-y1)
    y4=(x3-x1)
    Et voilà.
    Tu peux rajouter un coef ou une règle de 3 suivant si tu veux un segment, une droite, une demi-droite, etc
    Citation Envoyé par plegat Voir le message
    pas à moi.

    Soit p1(x1,y1) et p2(x2,y2) les deux points définissant ta droite
    Tu prends p3 à d% de p1 sur p1p2, coordonnées:
    x3=(1-d)*x1+d*x2
    y3=(1-d)*y1+d*y2
    Tu calcules p4 "à gauche" de p1p3 avec (produit vectoriel 3D Z*p1p3):
    x4=-(y3-y1)
    y4=(x3-x1)
    Et voilà.
    Tu peux rajouter un coef ou une règle de 3 suivant si tu veux un segment, une droite, une demi-droite, etc
    j'ai utilisé cette approche... mais ça donne pas vraiment le résultat escompté...
    d=.3
    p1: [x=183,y=214]
    p2: [x=370,y=214]
    p3: [x=239,y=214]
    p4: [x=0,y=56]


    de plus je pensais ajouté une variable afin de pouvoir spécifier une distance max pour retourner le point p4 du point p3

    on peut voir le résultat sur l'image

    je cherche donc a avoir de quoi comme sur la deuxième image
    Images attachées Images attachées   

  9. #9
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par robert_trudel Voir le message
    j'ai utilisé cette approche... mais ça donne pas vraiment le résultat escompté...
    Ca, c'est normal, je t'ai refilé des coordonnées de vecteur et pas de point (à mon avis je n'étais pas réveillé à cette heure-là, ou trop occupé à m'installer mon nouveau linux... saleté de machine...).

    Citation Envoyé par robert_trudel Voir le message
    de plus je pensais ajouté une variable afin de pouvoir spécifier une distance max pour retourner le point p4 du point p3
    Zou, les bonnes formules pour le point 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x4=x3-k*(y3-y1)
    y4=y3+k*(x3-x1)
    pour spécifier la distance entre le pt 4 et le pt 3, adapte la valeur de k. Normalement avec k=1, tu auras distance(3-4)=distance(1-3). Pour une distance(3-4)=1, il te faut k=1/distance(1-3). A toi d'adapter en fonction de ce que tu veux...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par plegat Voir le message
    Ca, c'est normal, je t'ai refilé des coordonnées de vecteur et pas de point (à mon avis je n'étais pas réveillé à cette heure-là, ou trop occupé à m'installer mon nouveau linux... saleté de machine...).



    Zou, les bonnes formules pour le point 4:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x4=x3-k*(y3-y1)
    y4=y3+k*(x3-x1)
    pour spécifier la distance entre le pt 4 et le pt 3, adapte la valeur de k. Normalement avec k=1, tu auras distance(3-4)=distance(1-3). Pour une distance(3-4)=1, il te faut k=1/distance(1-3). A toi d'adapter en fonction de ce que tu veux...
    ok merci

    j'avais réussi à obtenir de quoi.... mais avec cette formule là, c'est beaucoup plus rapide

    je faisais un produit scalaire, j'utilisais la formule de la ligne... bref beaucoup de calcul inutile

  11. #11
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    après quelques tests, il y a un hic,

    la dimension de la perpendicullaire grandie à mesure que tu déplaces la ligne x1 et x2...

  12. #12
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par robert_trudel Voir le message
    la dimension de la perpendicullaire grandie à mesure que tu déplaces la ligne x1 et x2...
    oui, enfin, euh... disons que moi je ne déplace rien du tout!

    quelques détails supplémentaires permettraient sans doute de donner un réponse (ou au moins d'y réfléchir). Comme précisé dans mon post précédent, la longueur de la perpendiculaire (aka distance entre les points 3 et 4) et fixée par le coef k que j'ai mis dans mes formules. Donc ça dépend de ce que tu as mis pour k... et de tout le reste autour.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  13. #13
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    je vais tenter réexpliquer plus clairement

    j'ai un Point A, B

    je lis relis via un segment

    je désire mettre un point C sur le segment à une distance h de A cette distance est fixe, donc si je bouge le point B (voir image 2 par rapport à 1) ça distance reste la même

    Pour avoir une distance fixe de de A à C j'ai utilisé la normalisation du vecteur

    ce qui donne l'image 3

    à partir du point C, je veux que créer une perpendiculaire au segment AB
    cette perpendiculaire sera de longueur L, ce qui donnera le point D (vers le haut) et E vers le bas

    La droite AB est dirigée par le vecteur AB de coordonnées (x,y).
    Tout droite perpendiculaire sera donc dirigée par un vecteur dont
    le produit scalaire avec AB est nul.
    Si on note (x', y') les coordonnées d'un tel vecteur, on a :
    x.x' + y.y' = 0
    Il suffit alors de choisir x'=y et y'=-x pour que ça joue.

    Pour que le segment perpendiculaire CD et CE ait une longueur fixe
    il faut faire la normale du vecteur

    on obtient alors l'image 4

    Dx = Cx + L*X
    Dy = Cy + L*Y

    Ex = Cx - L*X
    Ey = Cy - L*Y


    A(108,292)
    B(343,294)
    h=10
    Cx = 9.999
    Cy = 0.851

    au final j'obtiens la dernière image...
    et si je bouge le point B j'obtiens l'image


    on peut remarquer que C n'est pas sur le segment AB, mais que la la droite CDE est perpendiculaire à AB
    le problème est donc que les coordonnées du point C
    Images attachées Images attachées      

  14. #14
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par robert_trudel Voir le message
    A(108,292)
    B(343,294)
    h=10
    Cx = 9.999
    Cy = 0.851
    Citation Envoyé par robert_trudel Voir le message
    le problème est donc que les coordonnées du point C
    Je suis tout à fait d'accord avec toi et il n'y a donc rien à voir avec ton post précédent (celui où la perpendiculaire grandissait...)

    Dans la formule que tu donnes pour avoir le point C, on utilise des notions de vecteur. Donc les valeurs numériques que tu obtiens sont les coordonnées d'un vecteur, pas d'un point... donc si tu veux les coordonnées de ton point C, il faut ajouter les valeurs que tu obtiens avec la formule aux coordonnées du point A.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  15. #15
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par plegat Voir le message
    Je suis tout à fait d'accord avec toi et il n'y a donc rien à voir avec ton post précédent (celui où la perpendiculaire grandissait...)

    Dans la formule que tu donnes pour avoir le point C, on utilise des notions de vecteur. Donc les valeurs numériques que tu obtiens sont les coordonnées d'un vecteur, pas d'un point... donc si tu veux les coordonnées de ton point C, il faut ajouter les valeurs que tu obtiens avec la formule aux coordonnées du point A.
    j'ai utilisé une autre technique... car avec l'autre je voyais pas la fin du tunel là ça marche bien, sans trop de ligne de code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer des lignes et zones de texte avec PHP
    Par beegees dans le forum Langage
    Réponses: 8
    Dernier message: 29/10/2008, 20h05
  2. est-ce possible de créer des lignes imbriqué en postgres
    Par saidgrd dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 04/05/2008, 21h20
  3. Réponses: 10
    Dernier message: 07/03/2007, 18h46
  4. Réponses: 5
    Dernier message: 17/01/2007, 15h02
  5. [VBA-E] Créer des lignes en fonction d'un champ
    Par antakini dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/04/2006, 20h23

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