C`est un programme permettant le calcul de la longueur d`une liaison entre deux atomes dans un matériau, à partir des paramètres de maille(a,b,c,alpha,beta,gamma) et des coordonnées atomiques(x,y,z). Pour cela , on transforme les coordonnées(x,y,z) de chaque atome en coordonnées cartésiennes (Xt,Yt,Zt).
Source / Exemple :
Imports System.Math
Public Class Form1
Public Function degrad(ByVal D As Double) As Double
Return D * PI / 180
End Function
Function mtransformx(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal alpha As Double, ByVal beta As Double, ByVal gamma As Double) As Double
Dim XT As Double
XT = a * x + b * y * Cos(gamma) + c * z * Cos(beta)
Return XT
End Function
Function mtransformy(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal alpha As Double, ByVal beta As Double, ByVal gamma As Double) As Double
Dim YT As Double
YT = b * y * Sin(gamma) + c * z * (Cos(alpha) - Cos(beta) * Cos(gamma)) / Sin(gamma)
Return YT
End Function
Function mtransformz(ByVal x As Double, ByVal y As Double, ByVal z As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double, ByVal alpha As Double, ByVal beta As Double, ByVal gamma As Double) As Double
Dim ZT, V As Double
V = a * b * c * Sqrt(Abs((1 - Cos(alpha) ^ 2 - Cos(beta) ^ 2 - Cos(gamma) ^ 2 + 2 * Cos(alpha) * Cos(beta) * Cos(gamma))))
ZT = V * z / (a * b * Sin(gamma))
Return ZT
End Function
Function Distance(ByVal a1x As Double, ByVal a2x As Double, ByVal a1y As Double, ByVal a2y As Double, ByVal a1z As Double, ByVal a2z As Double) As Double
Dim d As Double
D = Sqrt((a1x - a2x) ^ 2 + (a1y - a2y) ^ 2 + (a1z - a2z) ^ 2)
Return d
End Function
Private Sub buttonCalcul_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonCalcul.Click
Dim a, b, c, alphaD, betaD, gammaD, alphaR, betaR, gammaR, a1x, a1y, a1z, a2x, a2y, a2z As Double
Dim a1xt, a1yt, a1zt, a2xt, a2yt, a2zt, d As Double
a = Convert.ToDouble(Ta.Text)
b = Convert.ToDouble(Tb.Text)
c = Convert.ToDouble(Tc.Text)
alphaD = Convert.ToDouble(Talpha.Text)
betaD = Convert.ToDouble(Tbeta.Text)
gammaD = Convert.ToDouble(Tgamma.Text)
a1x = Convert.ToDouble(TA1X.Text)
a1y = Convert.ToDouble(TA1Y.Text)
a1z = Convert.ToDouble(TA1Z.Text)
a2x = Convert.ToDouble(TA2X.Text)
a2y = Convert.ToDouble(TA2Y.Text)
a2z = Convert.ToDouble(TA2Z.Text)
alphaR = degrad(alphaD)
betaR = degrad(betaD)
gammaR = degrad(gammaD)
a1xt = mtransformx(a1x, a1y, a1z, a, b, c, alphaR, betaR, gammaR)
a1yt = mtransformy(a1x, a1y, a1z, a, b, c, alphaR, betaR, gammaR)
a1zt = mtransformz(a1x, a1y, a1z, a, b, c, alphaR, betaR, gammaR)
a2xt = mtransformx(a2x, a2y, a2z, a, b, c, alphaR, betaR, gammaR)
a2yt = mtransformy(a2x, a2y, a2z, a, b, c, alphaR, betaR, gammaR)
a2zt = mtransformz(a2x, a2y, a2z, a, b, c, alphaR, betaR, gammaR)
TTA1X.Text = a1xt.ToString
TTA1Y.Text = a1yt.ToString
TTA1Z.Text = a1zt.ToString
TTA2X.Text = a2xt.ToString
TTA2Y.Text = a2yt.ToString
TTA2Z.Text = a2zt.ToString
d = Distance(a1xt, a1yt, a1zt, a2xt, a2yt, a2zt)
Tdistance.Text = d.ToString()
End Sub
End Class
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.