Dessiner un triangle isocèle dans une picturebox

Résolu
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014 - 14 déc. 2006 à 23:31
mortmen Messages postés 8 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 15 août 2010 - 15 août 2010 à 16:52
Je n'arrive pas à dessiner un triangle dans une picturebox (pictriangle).

Voici une partie de code :

pictriangle.Cls
pictriangle.CurrentX = 0
pictriangle.CurrentY = 0
pictriangle.Line -Step(160, 230), vbred
pictriangle.Line -Step(-320, 0), vbRed
pictriangle.Line -Step(160, -230), vbRed

Qui peut m'aider ???
Grand merci d'avance.

jyd

6 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 08:15
J'ai décomposé pour que tu puisses mieux voir :

Private Sub Command1_Click()
  pictriangle.AutoRedraw = True
  pictriangle.DrawWidth = 5
  Dim Ax As Single, Ay As Single, Bx As Single, By As Single, Cx As Single, CY As Single
  Ax = 0
  Ax = pictriangle.ScaleWidth / 2
  Ay = 0
  Bx = 0
  By = pictriangle.ScaleHeight
  Cx = pictriangle.ScaleWidth
  CY = pictriangle.ScaleHeight
  pictriangle.Line (Ax, Ay)-(Bx, By), vbRed
  pictriangle.Line (Bx, By)-(Cx, CY), vbRed
  pictriangle.Line (Cx, CY)-(Ax, Ay), vbRed
End Sub
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
15 déc. 2006 à 09:17
Arf, ton problème est tout simple mon cher...

Déjà, là, prends conscience que tu dessine à la manière du language LOGO made under TO7, c'est à dire, à la manière des années 80 [mdr], ou, pour être plus précis, de manière relative. Sais-tu que tu peux aussi tracer des lignes de manière absolue ??? J'imagine que oui, mais juste au cas où, voici la syntaxe à utiliser :
objet.LINE (point1_X, point1_Y)-(point2_X, point2_Y), color [, [B][F]]
OBJET étant un contrôle possédant la méthode Line tel que les Form, les PictureBox, ...
Les options B, BF tracent respectivement un carré ou un carré rempli de la couleur.
Pi il vaut mieux utiliser une "structure de donnée" pour stocker les coordonnées des points.

Exemple :
[Private/Public] Type typPoint
 X As Long
 Y As Long
End Type

[Private/Public/Dim] Point1 As typPoint


[Private/Public/Dim] Point2 As typPoint





Point1.X = 0


Point1.Y = 0


Point2.X = 100


Point2.Y = 100

[objet].Line (Point1.X, Point1.Y)-(Point2.X, Point2.Y), [vbRed/RGB(255,0,0)], [B/BF]

bref








TON PROBLÈME :




'Tu part du point 0,0

pictriangle.CurrentX = 0
pictriangle.CurrentY = 0
'Tu traces une ligne de 0,0 à 160,230
pictriangle.Line -Step(160, 230), vbred
'Tu traces une ligne de 160,230 à -320,0
pictriangle.Line -Step(-320, 0), vbRed
pictriangle.Line -Step(160, -230), vbRed

DEUX CHOSES À SAVOIR :

- L'UNITÉ (de mesure) par défaut des contrôles VB sur lesquels tu peux dessiner (FORM, PICTUREBOX, ...) est en TWIPS et non en PIXELS !!! C'est une unité relative standard made by Crosoft pour garantir un affichage identique sous tous les types de supports (écrans, imprimante, ...). Généralement, 1 Pixel = 15 Twips (et inversement). Mais en réalité, le nombre de Twips par Pixels dépend des valeurs des propriétés "TwipsPerPixelX"
et "TwipsPerPixelY"
retournées par l'objet "Screen" (pour ton écran donc) : 
Screen.TwipsPerPixelX   
Screen.TwipsPerPixelY. Le plus simple, au lieu de tout convertir à chaque fois, est de paramétrer la propriété "ScaleMode" de ton objet. Scale = échelle, donc, c'est le mode de l'échelle utilisée (ce qui sous entend que l'échelle peut être personnalisée. Pour résoudre ton premier problème il faut soit régler cette propriété manuellement dans l'IDE (l'interface graphique) du VB, soit via cette ligne de code (avant les autres, dans l'initialisation de ton module, autrement dit, dans Form_Load de préférence) :

pictriangle.ScaleMode = vbPixels

(Note que vbPixels est une constante VB de valeur 3 )

- LE POINT 0,0. En effet, là tu dessines hors de l'écran !!! Le point 0,0 se trouve en haut à gauche de ta PictureBox et non, tel on en a l'habitude en maths, au centre de l'écran !!! Donc, avec tes valeurs négatives, tu dessines hors de la zone affichable. Il faut, tel le sous-entends JFMmarques, utiliser les Propriétés ScaleWidth et ScaleHeight de ton objet. Elles retourne la largeur et la hauteur de la zone dessinable DANS l'unité spécifiée via ScaleMode, le pixel en l'occurence !!!

'Définition de l'unité de l'échelle employée :

pictriangle.ScaleMode = vbPixels
'Centre horizontal de la zone de dessin :
Cx = pictriangle.ScaleWidth / 2

'Centre vertical de la zone de dessin :

Cy = pictriangle.ScaleHeight / 2

Enjoy


( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
3
jytest Messages postés 314 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 22 décembre 2014
15 déc. 2006 à 10:04
Merci pour votre précieuse aide !!!
Génial

jyd
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
15 déc. 2006 à 11:28
Bon...
Ceci étant dit :  tu as eu là de quoi dessiner le plus grand triangle isocèle inscriptible dans ta pictureBox


Tu a la liberté totale de dessiner d'autres triangles isocèles, mais alors :


"triangle isocèle" tout court ne signifie pas grand chose !


La manière la plus simple d'en définir un est de définir sa base BC (coordonnées des 2 extrémités de la base) et sa hauteur H (car il est évident que pour une même base, tu peux dessiner plusieurs triangles isocèles.
Un calcul arithmétique élémentaire te permet alors de déterminer les coordonnées du sommet A (abscisse (abscisse de C - abscisse de B)/2 et ordonnée ordonnée de B - H )

Ceci pour un triangle dont la base est parallèle à celle de ta pictureBox.

Pour un triangle "incliné", c'est un peu plus compliqué mais quelques notions de trigonométrie suffisent.


 


Amuse-toi bien.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
15 déc. 2006 à 16:24
Eh puis note également qu'il y a une API qui te les déssineront (les triangles quelconques) et peuvent même te les remplir... et même, te les remplir avec un dégradé !!!
est ton ami   (cf. Poly)

Enjoy







( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
0
mortmen Messages postés 8 Date d'inscription jeudi 1 janvier 2004 Statut Membre Dernière intervention 15 août 2010
15 août 2010 à 16:52
Salut ScSami,

Pourrait-on en savoir un peu plus sur ces API qui pourraient nous dessiner des triangles quelconques et qui peuvent même nous les remplir ?
ça m'intéresse !
Merci et bonne prog !!!
0
Rejoignez-nous