Tracer un cercle sans : sin() , cos() ni la propriété circle [que du calcul (rapide) en fait ]

Description

Bon ce code est explique dans le fichier Explication du zip.
C'est des maths alors ce qui y sont alergique : FUYEZ !

Bon pour tracer un cercle avec ce code; il faut :
--> Le Centre (Cx,Cy)
--> Le Rayon

L'algo de mon cru a besoin de 3 point situés sur le cercle.
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

Avec ces deux valeurs, on peut calculer tout les autres points !
Mais je vous conseille de regarder l'explication, si vosu êtes matheux vous comprendrez sinon... ben vous vous forcerez si ca vous interesse ! :)

Note : Idée fondatrice de ma prochain source : Simulation d'onde sur l'eau avec réflexion. That's all !

Source / Exemple :


' 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

Conclusion :


Pas de MAJ, Pas de bug...
Cet algo utilise un peu de mémoire, mais pas suffisement pour vraiment ralentir le pc.

A noter que la dim de lstP = 3 + 3 *1 + 3*2 + 3*4 + 3* 8 + 3*16 ... + 3*2^n
= 3 * ( 1 + 2 + 4 + 8 + 16 + ... + 2^n )
Magique ça ressemble a quelquechose de connu
soit : 3 * ( 2^ ( n + 1 ) - 1 )
Donc allez-y quand même molo avec n ! :) Pas de folie !

Codes Sources

A voir également

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.