elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ¿como obtener el angulo de una coordenada? VB 6.0
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿como obtener el angulo de una coordenada? VB 6.0  (Leído 9,206 veces)
AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
¿como obtener el angulo de una coordenada? VB 6.0
« en: 9 Mayo 2011, 04:02 am »

Holas tengo unas imagenes como estas:






tienen un punto azul en un lugar,debo hallar el angulo (0 - 360) en que se encuentran los puntos azules,en la primera parece mas o menos 280 grados, en la segunda imagen se puede sacar que el angulo es 90 con solo mirar,  por ahora hice un codigo que usa el api get pixel para buscar el punto azul y me devuelven el x,y donde se encuentra el punto, ¿que funcion o formula podria usar para obtener el angulo a partir de esas coordenadas en VB 6.0?


« Última modificación: 9 Mayo 2011, 04:07 am por alxspy » En línea

Dunkansdk

Desconectado Desconectado

Mensajes: 25


Ver Perfil
Re: ¿como obtener el angulo de una coordenada? VB 6.0
« Respuesta #1 en: 9 Mayo 2011, 04:19 am »

Código
  1. Option Explicit
  2. Public Const DegreeToRadian As Single = 0.0174532925
  3.  
  4. Sub main()
  5.  
  6.    MsgBox DegreeToRadian * Engine_GetAngle(50, 22, 67, 33)
  7.  
  8. End Sub
  9.  
  10. Public Function Engine_GetAngle(ByVal CenterX As Integer, ByVal CenterY As Integer, ByVal TargetX As Integer, ByVal TargetY As Integer) As Single
  11.  
  12. Dim SideA As Single
  13. Dim SideC As Single
  14.  
  15.    On Error GoTo ErrOut
  16.  
  17.    'Check for horizontal lines (90 or 270 degrees)
  18.    If CenterY = TargetY Then
  19.  
  20.        'Check for going right (90 degrees)
  21.        If CenterX < TargetX Then
  22.            Engine_GetAngle = 90
  23.  
  24.            'Check for going left (270 degrees)
  25.        Else
  26.            Engine_GetAngle = 270
  27.        End If
  28.  
  29.        'Exit the function
  30.        Exit Function
  31.  
  32.    End If
  33.  
  34.    'Check for horizontal lines (360 or 180 degrees)
  35.    If CenterX = TargetX Then
  36.  
  37.        'Check for going up (360 degrees)
  38.        If CenterY > TargetY Then
  39.            Engine_GetAngle = 360
  40.  
  41.            'Check for going down (180 degrees)
  42.        Else
  43.            Engine_GetAngle = 180
  44.        End If
  45.  
  46.        'Exit the function
  47.        Exit Function
  48.  
  49.    End If
  50.  
  51.    'Calculate Side C
  52.    SideC = Sqr(Abs(TargetX - CenterX) ^ 2 + Abs(TargetY - CenterY) ^ 2)
  53.  
  54.    'Side B = CenterY
  55.  
  56.    'Calculate Side A
  57.    SideA = Sqr(Abs(TargetX - CenterX) ^ 2 + TargetY ^ 2)
  58.  
  59.    'Calculate the angle
  60.    Engine_GetAngle = (SideA ^ 2 - CenterY ^ 2 - SideC ^ 2) / (CenterY * SideC * -2)
  61.    Engine_GetAngle = (Atn(-Engine_GetAngle / Sqr(-Engine_GetAngle * Engine_GetAngle + 1)) + 1.5708) * 57.29583
  62.  
  63.    'If the angle is >180, subtract from 360
  64.    If TargetX < CenterX Then Engine_GetAngle = 360 - Engine_GetAngle
  65.  
  66.    'Exit function
  67.  
  68. Exit Function
  69.  
  70.    'Check for error
  71. ErrOut:
  72.  
  73.    'Return a 0 saying there was an error
  74.    Engine_GetAngle = 0
  75.  
  76. Exit Function
  77.  
  78. End Function
  79.  


« Última modificación: 9 Mayo 2011, 05:14 am por Dunkansdk » En línea

AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: ¿como obtener el angulo de una coordenada? VB 6.0
« Respuesta #2 en: 16 Mayo 2011, 03:46 am »

gracias me sirvio de mucho.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ¿como obtener el angulo de una coordenada? VB 6.0
« Respuesta #3 en: 16 Mayo 2011, 19:45 pm »

.
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#msg1600888

Si 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.

Código
  1.  
  2. Option Explicit
  3.  
  4. Public Function GetAngle2Points(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Double
  5.    GetAngle2Points = GetAngleXY((x2 - x1), (y2 - y1))
  6. End Function
  7.  
  8. Public Function GetAngleXY(ByVal x As Double, ByVal y As Double) As Double
  9. Dim dblres              As Double
  10.    dblres = 0
  11.    If (y <> 0) Then
  12.        dblres = Radianes2Grados(Atn(x / y))
  13.        If (x <= 0 And y < 0) Then
  14.            dblres = dblres + 180
  15.        ElseIf (x > 0 And y < 0) Then
  16.            dblres = dblres + 180
  17.        ElseIf (x < 0 And y > 0) Then
  18.            dblres = dblres + 360
  19.        End If
  20.    Else
  21.        If (x > 0) Then
  22.            dblres = 90
  23.        ElseIf (x < 0) Then
  24.            dblres = 270
  25.        End If
  26.    End If
  27.    GetAngleXY = dblres
  28. End Function
  29.  
  30. Public Function Grados2Radianes(ByVal Grados As Double) As Double
  31.    Grados2Radianes = Grados * (3.14159265358979 / 180)
  32. End Function
  33.  
  34. Public Function Radianes2Grados(ByVal Radianes As Double) As Double
  35.    Radianes2Grados = Radianes * 180 / 3.14159265358979
  36. End Function
  37.  
  38. Private Sub Form_Load()
  39.    MsgBox GetAngle2Points(79, 0, 90, 90)
  40. End Sub
  41.  
  42.  

Dulces Lunas!¡.
« Última modificación: 16 Mayo 2011, 21:32 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: ¿como obtener el angulo de una coordenada? VB 6.0
« Respuesta #4 en: 16 Mayo 2011, 20:15 pm »

Código
  1.  
  2.    'Calculate Side C
  3.    SideC = Sqr(Abs(TargetX - CenterX) ^ 2 + Abs(TargetY - CenterY) ^ 2)
  4.  
  5.    'Side B = CenterY
  6.  
  7.    'Calculate Side A
  8.    SideA = Sqr(Abs(TargetX - CenterX) ^ 2 + TargetY ^ 2)
  9.  

No tienes por que hacer un abs(), las potencia pares dan un valor positivo.

P.D.: No es necesario realizar la raíz para calcular los grados entre dos puntos.

Dulces Lunas!¡.
.
« Última modificación: 16 Mayo 2011, 20:59 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como obtener...?
Juegos y Consolas
hackzero 0 1,311 Último mensaje 9 Agosto 2005, 01:58 am
por hackzero
Cómo obtener ID en PHP
PHP
Fireball-CH 4 6,134 Último mensaje 3 Mayo 2007, 03:42 am
por Fireball-CH
Coordenada de imagen
Programación Visual Basic
hannah 0 1,216 Último mensaje 15 Noviembre 2008, 19:11 pm
por hannah
Como ubicar está coordenada con GoogleMaps...
Foro Libre
Shell Root 4 4,194 Último mensaje 17 Junio 2011, 00:55 am
por dantemc
coordenada con diferencia máxima
Programación C/C++
indict 5 2,371 Último mensaje 29 Enero 2013, 15:27 pm
por leosansan
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines