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
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
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
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...
salut .
je rajoute le fait de pouvoir utiliser l'algo de breseham
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
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
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
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
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:
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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x4=x3-k*(y3-y1) y4=y3+k*(x3-x1)
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...
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.
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
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager