.
El angulo se calcula con estas dos formulas...
x = d * sin(grados)
y = d * cos(grados)Donde ( d = Distancia entre dos puntos )
d = RaizCuadrada( (x1-x2)(x1-x2) + (y1-y2)(y1-y2) ) // Se puede omitir la raíz...
Calculando los grados:
Sustituyendo y haciendo una sola ecuación con dos incógnitas...
d = x/sin(grados) // despejando a d de la 1ra ecuación para sustituirla en la 2da.
y = (x/sin(grados)) * cos(grados)
y = (x*cos(grados))/sin (grados) // aplicando la identidad trigonométrica cos(x)/sin(x) = cot(x)
y = x * Cot(grados)Calculando los grados:
grados = arctan(y/x) // con esta formula sabes los grados entre dos puntos dados.
El angulo sera entre 0 a 180 para saber si es mayor tienes que hacer una comparación con el eje X o Y según desees; mira este enlace tuve el mismo problema solo que en coordenadas 3D:
http://foro.elhacker.net/foro_libre/ayuda_matematica-t324169.0.html;msg1600888#msg1600888Si tienes dudas: http://es.wikipedia.org/wiki/Identidades_trigonométricas
Espero no tenga horrores... los grados los da en sentido horario empesgando como en el reloj de maesillas a las 12 coo los 0 grados, con unos ajustes se puede corregir esto lo haria yo pero ya no tengo tiempo.
Option Explicit
Public Function GetAngle2Points(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Double
GetAngle2Points = GetAngleXY((x2 - x1), (y2 - y1))
End Function
Public Function GetAngleXY(ByVal x As Double, ByVal y As Double) As Double
Dim dblres As Double
dblres = 0
If (y <> 0) Then
dblres = Radianes2Grados(Atn(x / y))
If (x <= 0 And y < 0) Then
dblres = dblres + 180
ElseIf (x > 0 And y < 0) Then
dblres = dblres + 180
ElseIf (x < 0 And y > 0) Then
dblres = dblres + 360
End If
Else
If (x > 0) Then
dblres = 90
ElseIf (x < 0) Then
dblres = 270
End If
End If
GetAngleXY = dblres
End Function
Public Function Grados2Radianes(ByVal Grados As Double) As Double
Grados2Radianes = Grados * (3.14159265358979 / 180)
End Function
Public Function Radianes2Grados(ByVal Radianes As Double) As Double
Radianes2Grados = Radianes * 180 / 3.14159265358979
End Function
Private Sub Form_Load()
MsgBox GetAngle2Points(79, 0, 90, 90)
End Sub
Dulces Lunas!¡.