Soyez le premier à donner votre avis sur cette source.
Vue 8 763 fois - Téléchargée 356 fois
' Pour les faignasses y'a tjrs le zip ! :þ 'Voici un aperçu de ce qu'il faut modifier pour pouvoir integrer ce code à un projet : 'Form.ScaleMode = 3 - Pixel 'Créer une PictureBox nommée "Plan" ' Plan.Appearance = 0 - Flat ' Plan.AutoRedraw = True No ' Plan.BorderStyle = 0 - None ' Plan.AutoRedraw = True ' Plan.Height = 481 ' Plan.Width = 601 ' Plan.scaleMode = 3- Pixel ' Plan.ScaleHeight = -481 ' Plan.ScaleLeft = 0 ' Plan.ScaleTop = 480 ' Plan.ScaleWidth = 601 'Creer un cmdButton nommé cmdTracer 'Creer un label nommé lblX 'Creer un label nommé lblY 'Déclaration : Private Type Spot X As Single Y As Single Lien As Long End Type Private Sub cmdTracer_Click() 'Vérifier que le traçage recouvre bien le cercle Plan.Circle (300, 240), 200 ' N'entre pas dans l'algo ! c'est juste une Vérif ! 'Déclaration des propriétés du cercle Dim Cx As Single, Cy As Single 'Centre Dim Rayon As Single 'Rayon Dim lstP() As Spot, nbrP As Long ' Liste des points créés, ainsi que leur nombre Dim n As Byte 'Précision (IMPORTANT) n = 10 ' Faites varier ce nombre Dim p As Long, K As Long ' Variable de boucles Cx = 300 ' Cy = 240 '' Définition du centre et du rayon. Rayon = 200 ' ' On génére les trois points et on les lie l'un à l'autre. nbrP = 3 ReDim lstP(nbrP) lstP(1).X = Cx + Rayon * 1 lstP(1).Y = Cy + Rayon * 0 lstP(1).Lien = 2 Plan.PSet (lstP(1).X, lstP(1).Y), vbRed lstP(2).X = Cx - Rayon / 2 lstP(2).Y = Cy + Rayon * Sqr(3) / 2 lstP(2).Lien = 3 Plan.PSet (lstP(2).X, lstP(2).Y), vbRed lstP(3).X = Cx - Rayon / 2 lstP(3).Y = Cy - Rayon * Sqr(3) / 2 lstP(3).Lien = 1 Plan.PSet (lstP(3).X, lstP(3).Y), vbRed For K = 1 To n 'Recréée successivement des points au mileu de ceux déja existant. DoEvents For p = 1 To K * 2 ^ K nbrP = nbrP + 1 ReDim Preserve lstP(nbrP) U = (lstP(p).X + lstP(lstP(p).Lien).X) / 2 - Cx V = (lstP(p).Y + lstP(lstP(p).Lien).Y) / 2 - Cy lstP(nbrP).X = Rayon * U / Sqr(U ^ 2 + V ^ 2) + Cx lstP(nbrP).Y = Rayon * V / Sqr(U ^ 2 + V ^ 2) + Cy lstP(nbrP).Lien = lstP(p).Lien lstP(p).Lien = nbrP Plan.PSet (lstP(nbrP).X, lstP(nbrP).Y), vbRed Next p 'Pause ': Mettez pause pour visionner Pas à Pas la construction. Next K End Sub 'Juste un affichage Private Sub Plan_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) lblX.Caption = "X = " & X lblY.Caption = "Y = " & Y End Sub
suffit de faire varier Y de -1 à 1 par pas très faible (genre 0.01 ou 0.01) on obtient X ( racine_carre(1-Y²) )
et le tour est joué !
Ici le code, ne demande que 2 valeurs ( en fait 4 avec cos(0) et sin(0) )
Un algo utilisant sin et cos ne pourrai etre retranscrit ! Avec celui la on contourne le problème en ne lui fournissant que 3 valeurs (connues), ce qui est relativement faible !
Craps => C'est un code sans prétention qui, a la base, n'est pas fait pour tracer 1 000 000 de cercles !
Il suffit amplement pour des softs de dessinage genre Paint brush etc ... où on trace une dizaine de cercles au max ; si par exemple on est contraint de ne pas utiliser cos et sin (et la fonction circle ou bien une homogue dans un autre langage )!
( De toutes façons quand on utilise paintbrush c'est qu'on a du temps à perdre ! :p )
Ce code permet de tracer une petite dizaine de cercles que l'utilisateur demande , pas pour mettre dans une boucle i=1 to 1000000 c'est évident ! :)
car la tu utilise les racines carre, fodrait faire des tests en tracant 1 million de cercle successif, pour voir....
TRACER UN CERCLE SANS : SIN() , COS() NI LA PROPRIÉTÉ CIRCLE [QUE DU CALCUL (RAPIDE) EN FAIT ]
et pis
Il n'y a donc que 2 valeurs qui sont vraiment a connaitre (dur !!! ) pour tracer le cercle : Cos( 2.Pi/3 ) et Sin(2.Pi/3 )
-1/2 sqr(3)/2
un peu contradictoire....
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.