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

jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 14 déc. 2006 à 23:31 - Dernière réponse : mortmen 8 Messages postés jeudi 1 janvier 2004Date d'inscription 15 août 2010 Dernière intervention
- 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
jmfmarques 7668 Messages postés samedi 5 novembre 2005Date d'inscription 22 août 2014 Dernière intervention - 15 déc. 2006 à 08:15
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de jmfmarques
Meilleure réponse
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 15 déc. 2006 à 09:17
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de ScSami
jytest 315 Messages postés dimanche 27 novembre 2005Date d'inscription 22 décembre 2014 Dernière intervention - 15 déc. 2006 à 10:04
0
Merci
Merci pour votre précieuse aide !!!
Génial

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