Dessiner un triangle isocèle dans une picturebox [Résolu]

Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
- - Dernière réponse : mortmen
Messages postés
8
Date d'inscription
jeudi 1 janvier 2004
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
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
3
Merci
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

Merci jmfmarques 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de jmfmarques
Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
3
Merci
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". )

Merci ScSami 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de ScSami
Messages postés
315
Date d'inscription
dimanche 27 novembre 2005
Dernière intervention
22 décembre 2014
0
Merci
Merci pour votre précieuse aide !!!
Génial

jyd
Commenter la réponse de jytest
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Dernière intervention
22 août 2014
0
Merci
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.
Commenter la réponse de jmfmarques
Messages postés
1490
Date d'inscription
mercredi 5 février 2003
Dernière intervention
3 décembre 2007
0
Merci
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". )
Commenter la réponse de ScSami
Messages postés
8
Date d'inscription
jeudi 1 janvier 2004
Dernière intervention
15 août 2010
0
Merci
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 !!!
Commenter la réponse de mortmen

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.