Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Private Sub POINT_X(yp, x1 As Integer, x2 As Integer) ' limites gauche droite
Dim a As Single, y As Integer
For a = PId2 To deg_270 Step 0.0025 ' 90° > 270°
y = CY + Sin(a) * raY
If y = yp Then
x1 = CX + Cos(a) * raX
x2 = CX + Cos(a + PI) * raX: Exit For
End If
Next a
End Sub
Private Sub POINT_Y(xp, y1 As Integer, y2 As Integer) ' limites haut bas
Dim a As Single, x As Integer
For a = PI To PIm2 Step 0.0025 ' 180° > 360°
x = CX + Cos(a) * raX
If x = xp Then
y1 = CY + Sin(a) * raY
y2 = CY + Sin(a + PI) * raY: Exit For
End If
Next a
End Sub
Private Type LePoint X As Double Y As Double End Type Private Type LesPoints A As LePoint B As LePoint C As LePoint D As LePoint End Type
Private Function PixelVersTrigo(P As LePoint, O As LePoint) As LePoint 'P point cliqué, 0 centre du cercle (pour Origine) Dim res As LePoint res.x = P.x - O.x 'translation en X pour obtenir une abscisse par rapport au centre du cercle res.Y = O.Y - P.Y 'translation en Y avec changement de signe, les pixels étant positifs en Y vers le bas. PixelVersTrigo = res End Function Private Function TrigoVersPixel(Z As LePoint, O As LePoint) As LePoint 'Z point calculé, 0 centre du cercle (pour Origine) Dim res As LePoint res.x = O.x - Z.x 'translation en X pour obtenir une abscisse en pixels res.Y = Z.Y - O.Y 'translation en Y avec changement de signe, les pixels étant positifs en Y vers le bas. TrigoVersPixel = res End Function
Private Function CalculLignes(P As LePoint, O As LePoint, R As Double) As LesPoints 'P point cliqué, O centre du cercle, R rayon du cercle, A, B, C et D points calculés Dim m As LePoint 'point cliqué dans le repère trigo m = PixelVersTrigo(P, O) 'on vérifie si le point est dans le cercle Dim rho As Double rho = Sqr(m.x * m.x + m.Y * m.Y) If tho > R Then MsgBox ("Point cliqué en dehors du cercle") Exit Function End If Dim Pi As Double Pi = 3.14159 Dim A, B, C, D As LePoint Dim aCosTeta As Double aCosTeta = Acos(m.x / R) A.x = m.x A.Y = R * Sin(aCosTeta) B.x = m.x B.Y = R * Sin(2 * Pi - aCosTeta) Dim aSinBeta As Double aSinBeta = Asin(m.Y / R) C.x = R * Cos(aSinBeta) C.Y = m.Y If aSinBeta < 0 Then D.x = R * Cos(Pi - aSinBeta) Else D.x = R * Cos(3 * Pi - aSinBeta) End If D.Y = m.Y 'transfo de coordonnées Dim res As LesPoints res.A = TrigoVersPixel(A, O) res.B = TrigoVersPixel(B, O) res.C = TrigoVersPixel(C, O) res.D = TrigoVersPixel(D, O) CalculLignes = res End Function
Private Function TrigoVersPixel(Z As LePoint, O As LePoint) As LePoint 'Z point calculé, 0 centre du cercle (pour Origine) Dim res As LePoint res.xX= O.X + Z.X 'translation en X pour obtenir une abscisse en pixels res.Y = O.Y - Z.Y 'translation en Y avec changement de signe, les pixels étant positifs en Y vers le bas. TrigoVersPixel = res End Function
B.X = m.X B.Y = -1 * A.X 'et plus loin D.X = -1 * C.X D.Y = m.Y
A.x = m.x A.Y = R * Sqr( 1 - (m.x / R)* (m.x / R)) B.x = m.x B.Y = -1 * A.Y C.x = R * Sqr( 1 - (m.Y / R)* (m.Y / R)) C.Y = m.Y D.x = -1 * C.Y D.Y = m.Y