elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 01:01  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo, raul338)
| | |-+  ¿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 1,621 veces)
AlxSpy

Desconectado Desconectado

Mensajes: 137


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

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 por alxspy » En línea
Dunkansdk

Desconectado Desconectado

Mensajes: 20


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

Código
Option Explicit
Public Const DegreeToRadian As Single = 0.0174532925
 
Sub main()
 
   MsgBox DegreeToRadian * Engine_GetAngle(50, 22, 67, 33)
 
End Sub
 
Public Function Engine_GetAngle(ByVal CenterX As Integer, ByVal CenterY As Integer, ByVal TargetX As Integer, ByVal TargetY As Integer) As Single
 
Dim SideA As Single
Dim SideC As Single
 
   On Error GoTo ErrOut
 
   'Check for horizontal lines (90 or 270 degrees)
   If CenterY = TargetY Then
 
       'Check for going right (90 degrees)
       If CenterX < TargetX Then
           Engine_GetAngle = 90
 
           'Check for going left (270 degrees)
       Else
           Engine_GetAngle = 270
       End If
 
       'Exit the function
       Exit Function
 
   End If
 
   'Check for horizontal lines (360 or 180 degrees)
   If CenterX = TargetX Then
 
       'Check for going up (360 degrees)
       If CenterY > TargetY Then
           Engine_GetAngle = 360
 
           'Check for going down (180 degrees)
       Else
           Engine_GetAngle = 180
       End If
 
       'Exit the function
       Exit Function
 
   End If
 
   'Calculate Side C
   SideC = Sqr(Abs(TargetX - CenterX) ^ 2 + Abs(TargetY - CenterY) ^ 2)
 
   'Side B = CenterY

   'Calculate Side A
   SideA = Sqr(Abs(TargetX - CenterX) ^ 2 + TargetY ^ 2)
 
   'Calculate the angle
   Engine_GetAngle = (SideA ^ 2 - CenterY ^ 2 - SideC ^ 2) / (CenterY * SideC * -2)
   Engine_GetAngle = (Atn(-Engine_GetAngle / Sqr(-Engine_GetAngle * Engine_GetAngle + 1)) + 1.5708) * 57.29583
 
   'If the angle is >180, subtract from 360
   If TargetX < CenterX Then Engine_GetAngle = 360 - Engine_GetAngle
 
   'Exit function

Exit Function
 
   'Check for error
ErrOut:
 
   'Return a 0 saying there was an error
   Engine_GetAngle = 0
 
Exit Function
 
End Function
 


« Última modificación: 9 Mayo 2011, 05:14 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 »

gracias me sirvio de mucho.
En línea
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

.
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
 
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!¡.
« Última modificación: 16 Mayo 2011, 21:32 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
BlackZeroX (Astaroth)
Wiki

Desconectado Desconectado

Mensajes: 2.831


I'Love...!¡.


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

Código
 
   'Calculate Side C
   SideC = Sqr(Abs(TargetX - CenterX) ^ 2 + Abs(TargetY - CenterY) ^ 2)
 
   'Side B = CenterY

   'Calculate Side A
   SideA = Sqr(Abs(TargetX - CenterX) ^ 2 + TargetY ^ 2)
 

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 por BlackZeroX▓▓▒▒░░ » En línea

Web Principal-->[ Blog(VB6) | Host File (Public & Private) | Scan Port | (New)MyInfraPC (Descubre mi Contraseña venefi. $) ]



The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Como detectar distancia y ángulo de una red wi-fi?
Hacking Wireless
ache 6 4,485 Último mensaje 20 Julio 2005, 07:30
por Xeneixe
Saber coordenada de una imagen con javascript.
Desarrollo Web
SirLanceCC 3 1,127 Último mensaje 20 Diciembre 2006, 02:23
por sirdarckcat
Encuentra el ángulo!
Desafíos - Wargames
ghastlyX 2 2,283 Último mensaje 25 Noviembre 2007, 22:18
por ghastlyX
Coordenada de imagen
Programación Visual Basic
hannah 0 295 Último mensaje 15 Noviembre 2008, 19:11
por hannah
Como ubicar está coordenada con GoogleMaps...
Foro Libre
Shell Root 4 1,562 Último mensaje 17 Junio 2011, 00:55
por dantemc
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines