bonsoir, je voudrais savoir comment écrire un programme qui dessine un octogone régulier.
Merci et à bientôt
bonsoir, je voudrais savoir comment écrire un programme qui dessine un octogone régulier.
Merci et à bientôt
Bonjour !
Quelle difficulté rencontrez-vous ?
La difficulté est que je n'arrive pas à l'aide d'une boucle dessiner un polygone régulier à partir d'un point ; il s'agit de tracer un coté du polygone puis de tourner d'un angle donné j'usqu'à obtenir une ligne fermée
Vous n'y arrivez pas, mais encore ? Pourriez-vous montrer le code que vous avez écrit, même s'il n'est pas bon ? Parce que, franchement, personne n'est ici pour faire vos devoirs à votre place.
Ce forum n'ayant pas bougé depuis longtemps, je me permets de donner une solution qui pourrait servir à d'autres en plus du demandeur(On est tous passé par cette étape d'incertitude de ce qu'on fait ou ce qu'on veut faire) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Uses Crt, Graph; VAR I, R, X, Y, X1, Y1 : Integer; Ang : Real; Poly: Byte ; {====================================} PROCEDURE initgr; VAR Gd,Gm:integer; PathToDriver:String; Begin Gd:= detect; initgraph(Gd,Gm,'BGI'); IF (graphresult<>grok) then begin clrscr; writeln; writeln(' Pilote graphique introuvable ! '); Write(' Indiquer le chemin du pilote graphique : '); Readln(PathToDriver); gd:=detect; InitGraph(Gd,Gm,PathToDriver); end; End; {======================================================} {Pour afficher un polygone de n côtés, on doit mettre la valeur n souhaitée dans la variable Poly, On peut faire la même chose pour le rayon R du cercle circonscrit Le polygone étant régulier, on peut commencer à partir d'un triagle équilatéral, un carré...} Begin Repeat Write(' Donner le nombre de côtés du polygone n = '); Readln(Poly); ClrScr; Until Poly >=3; InitGr; SetColor(14);{Couleur de départ jaune} SetLineStyle(0,0,3); {Style de trait : épais, la normale est 1 ou tout simplement on supprime cette ligne} {Centre de l'écran} X:=GetMaxX div 2; Y:=GetMaxY div 2; {On marque le centre du polygone en jaune} PutPixel(x,y,14); {Initilisation du rayon R} R:=150; {Calcul de l'angle de rotation} Ang := 2*Pi/Poly; {On commence sur l'axe horizontal} MoveTo(X+R, Y); {Itération sur les côtés du polygone} For i:= 1 To Poly DO begin X1:= Round(x+R*Cos(i*Ang)) ; Y1:= Round(y+R*Sin(i*Ang)); LineTo(X1, Y1); SetColor(i); {Changement de couleur pour les côtés du polygone. On peut s'en passer} end; readln; CloseGraph; End.
Ne pas oublier le tag
si satisfait.
Voter pour toute réponse satisfaisante avec
pour encourager les intervenants.
Balises CODE indispensables. Regardez ICI
Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
Vous pouvez consulter mes contributions
Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
En suivant la même méthode, on peut également utiliser le type PointType et la fonction DrawPoly :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 program Octogone; { Compilation testée : Free Pascal 2.6.4, Turbo Pascal 7.0. } uses Graph, {$IFDEF FPC}WinCrt{$ELSE}Crt{$ENDIF}; const A = 2 * PI / 8; var pilote, mode: {$IFDEF FPC}smallint{$ELSE}integer{$ENDIF}; points: array[0..8] of pointType; xc, yc, r, i: integer; begin pilote := {$IFDEF FPC}d8bit{$ELSE}VGA{$ENDIF}; mode := {$IFDEF FPC}m640x480{$ELSE}VGAHi{$ENDIF}; InitGraph(pilote, mode, 'C:\BGI'); xc := GetMaxX div 2; yc := GetMaxY div 2; r := GetMaxY div 3; for i := 0 to 8 do begin points[i].x := xc + Round(r * Cos(A * i)); points[i].y := yc + Round(r * Sin(A * i)); end; DrawPoly(SizeOf(points) div SizeOf(pointType), points); ReadKey; CloseGraph; end.
Salut Roland ;
Pour FPC, je ne l'ai jamais(ou presque) utilisé, donc pas la compilation conditionnelle utilisée dans ton code.
En ce qui concerne DrawPoly et PointType, je connais et c'est peut-être plus court, mais je n'ai pas voulu les utiliser pour ne pas trop laisser le demandeur perplexe quant à la signification des différents termes. Déjà avec le code que j'ai envoyé et d'après sa demande, il semble très débutant en la matière.
Merci encore pour le code et je te donne le![]()
Ne pas oublier le tag
si satisfait.
Voter pour toute réponse satisfaisante avec
pour encourager les intervenants.
Balises CODE indispensables. Regardez ICI
Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
Vous pouvez consulter mes contributions
Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
Ne pas oublier L'Aide VBScript et MSDN VB6 Fr
Partager