[R] Petit soucis avec "La flèche de Koch"

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
sozary
Niveau 6
Niveau 6
Messages : 274
Enregistré le : lun. 20 janv. 2014 19:17
Status : Hors ligne

[R] Petit soucis avec "La flèche de Koch"

#1

Message par sozary »

Bonjour!
Petit soucis...
Après m'être bien entraîné en récursivité, j'ai décidé de faire la fractale du flocon de Koch!! Malheureusement, le résultat est bizarre:
l'algorithme est bon, tout marche, mais mon triangle équilatéral à les côtés inversés, sauf la base.
En gros le motif est inversé sur mon triangle équilatéral sauf à la base, et on dirait une flèche, c'est beau, certes, mais je voulais pas ça à la base -__-!
► Afficher le texte
Modifié en dernier par sozary le ven. 05 sept. 2014 18:01, modifié 1 fois.
"Là où la volonté est grande, les difficultés diminuent.", Niccolò Machiavelli
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#2

Message par jchd »

Essaye avec ça :

Code : Tout sélectionner

For $i = 0 To $max
    _KochFlake($hGraphic, 500, 421, 200, 421, $i)
    _KochFlake($hGraphic, 200, 421, (200 + 500) / 2, Sqrt((350 ^ 2) - (300 ^ 2)), $i)
    _KochFlake($hGraphic, (200 + 500) / 2, Sqrt((350 ^ 2) - (300 ^ 2)), 500, 421, $i)
    WinSetTitle($hGUI, $title, $title & " -Génération " & $i & " -")
    Sleep(600)
Next
Par contre tu peux voir que le calcul des coordonnées ne se recoupe pas bien.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Faco
Niveau 4
Niveau 4
Messages : 80
Enregistré le : lun. 29 juil. 2013 18:09
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#3

Message par Faco »

Salut,
j'ai juste inversé tes coordonnées et ça passe ( et commence ta boucle à '1' vu que tu fait rien si '$i==0') :
► Afficher le texte
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#4

Message par jchd »

Oui, si l'on le veut en flocon (vers l'extérieur). Ce que je voulais souligner est qu'on doit calculer les coordonnées du sommet en fonction de la taille, plutôt que de mettre une valeur litérale (qui était fausse).

Avec l'expansion vers l'extérieur on ne voit pas que le dessin est bancal.

Sinon, ça donnerait ça :

Code : Tout sélectionner

Global Const $PI = 3.141592653589793, $COS60 = Cos($PI / 3), $SIN60 = Sin($PI / 3)
Global $iTaille = 600, $iMax = 5


Local $iMarge = 50, $iH = $iTaille + 2 * $iMarge, $iV = $iTaille * 2 * Sqrt(3) / 3 + 2 * $iMarge, $sTitle = "Flocon de Koch"
Local $hGUI = GUICreate($sTitle, $iH, $iV)
GUISetState(@SW_SHOW)
_GDIPlus_Startup()
Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
Local $aPts = [ _
    [$iMarge, $iMarge + $iTaille * Sqrt(3) / 2], _
    [$iH - $iMarge, $iMarge + $iTaille * Sqrt(3) / 2], _
    [$iMarge + $iTaille / 2, $iMarge] _
]
For $i = 1 To $iMax
    _KochFlake($hGraphic, $aPts[0][0], $aPts[0][1], $aPts[1][0], $aPts[1][1], $i)
    _KochFlake($hGraphic, $aPts[2][0], $aPts[2][1], $aPts[0][0], $aPts[0][1], $i)
    _KochFlake($hGraphic, $aPts[1][0], $aPts[1][1], $aPts[2][0], $aPts[2][1], $i)
    WinSetTitle($hGUI, $sTitle, $sTitle & " -Génération " & $i & " -")
    Sleep(600)
Next
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE

Func _KochFlake($hGraph, $ix, $iy, $jx, $jy, $k)
    If $k <> 0 Then
        Local $a[2], $b[2], $c[2], $d[2], $e[2]
        $a[0] = $ix
        $a[1] = $iy
        $b[0] = $jx
        $b[1] = $jy
        $c[0] = $a[0] + ($b[0] - $a[0]) / 3
        $c[1] = $a[1] + ($b[1] - $a[1]) / 3
        $d[0] = $a[0] + 2 * ($b[0] - $a[0]) / 3
        $d[1] = $a[1] + 2 * ($b[1] - $a[1]) / 3
        $e[0] = ($c[0] + $d[0]) * $COS60 - ($d[1] - $c[1]) * $SIN60
        $e[1] = ($c[1] + $d[1]) * $COS60 + ($d[0] - $c[0]) * $SIN60
        _GDIPlus_GraphicsDrawLine($hGraph, $c[0], $c[1], $d[0], $d[1])
        _GDIPlus_GraphicsDrawLine($hGraph, $a[0], $a[1], $c[0], $c[1])
        _GDIPlus_GraphicsDrawLine($hGraph, $c[0], $c[1], $e[0], $e[1])
        _GDIPlus_GraphicsDrawLine($hGraph, $e[0], $e[1], $d[0], $d[1])
        _GDIPlus_GraphicsDrawLine($hGraph, $d[0], $d[1], $b[0], $b[1])
        _KochFlake($hGraph, $a[0], $a[1], $c[0], $c[1], $k - 1)
        _KochFlake($hGraph, $c[0], $c[1], $e[0], $e[1], $k - 1)
        _KochFlake($hGraph, $e[0], $e[1], $d[0], $d[1], $k - 1)
        _KochFlake($hGraph, $d[0], $d[1], $b[0], $b[1], $k - 1)
    EndIf
EndFunc   ;==>_KochFlake
Note : inutile de passer en paramètre une variable global et de la passer en paramètre si on ne se sert pas de celui-ci ($hGraphics --> $hGraph)
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2127
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#5

Message par TommyDDR »

[quote="jchd"]Note : inutile de passer en paramètre une variable global et de la passer en paramètre si on ne se sert pas de celui-ci ($hGraphics --> $hGraph)

Code : Tout sélectionner

Local $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
...
_KochFlake($hGraphic, $aPts[0][0], $aPts[0][1], $aPts[1][0], $aPts[1][1], $i)[/quote]
Je suis totalement d'accord.
Mais : Une variable Local déclaré hors d'une fonction n'est pas considérée comme Global ?

Code : Tout sélectionner

Opt("MustDeclareVars", 1)

Local $test = 5

test()

Func test()
    ConsoleWrite($test & @LF)
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Avatar du membre
sozary
Niveau 6
Niveau 6
Messages : 274
Enregistré le : lun. 20 janv. 2014 19:17
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#6

Message par sozary »

Merci pour vos réponses, mais la solution de Faco me semble plus que simpliste et est la plus proche de la mienne, donc c'est surtout celle la que j'ai retenu :)!
Merci!
"Là où la volonté est grande, les difficultés diminuent.", Niccolò Machiavelli
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Petit soucis avec "La flèche de Koch"

#7

Message par jchd »

Oui mais le résultat est faux !

A part ça, j'ai juste rendu paramétrable la taille du côté et calculé à partir de ça.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Petit soucis avec "La flèche de Koch"

#8

Message par mikell »

TommyDDR a écrit :Mais : Une variable Local déclaré hors d'une fonction n'est pas considérée comme Global ?
Thus saith the wiki
there is no point declaring any variables in the main body of a script as Local - they will be Global regardless
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Petit soucis avec "La flèche de Koch"

#9

Message par jchd »

Pas d'accord du tout, mais ce n'est pas le lieu d'un tel débat.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
sozary
Niveau 6
Niveau 6
Messages : 274
Enregistré le : lun. 20 janv. 2014 19:17
Status : Hors ligne

Re: [R] Petit soucis avec "La flèche de Koch"

#10

Message par sozary »

J'ai fais quelques modif jchd, histoire de faire un code correct :)
"Là où la volonté est grande, les difficultés diminuent.", Niccolò Machiavelli
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [R] Petit soucis avec "La flèche de Koch"

#11

Message par jchd »

Bon. Il fonctionnait le mien au moins ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Répondre