Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: Luis M. Refeca Gonzalez en Mayo 10, 2018, 11:20:45 PM

Título: indicar rotacion según coordenadas geograficas
Publicado por: Luis M. Refeca Gonzalez en Mayo 10, 2018, 11:20:45 PM
Hola, este será mi segundo proyecto y quiero que sea un poco mejor,
 
Estoy desarrollando una aplicación para android que pasandole las coordenadas geograficas de un punto me diga cual es la direccion de ese punto respecto a mi posicion real(por supuesto tomando esas coordenadas reales donde estoy mediante el gps del dispositivo android) como si fuera una brujula pero que en vez de apuntar al norte apunte al punto que le paso...
 
 
 
 saludos de antemano
Título: indicar rotacion según coordenadas geograficas
Publicado por: Braltor en Mayo 11, 2018, 12:03:05 AM
si es un punto cercano en el planeta se puede calcular como si fuera un plano con:
 
https://docs.unity3d.com/ScriptReference/Mathf.Atan2.html (https://docs.unity3d.com/ScriptReference/Mathf.Atan2.html)
 
pero puede volverse algo mas complicado xq estamos parados en una esfera, aqui esta explicado:
 
http://www.movable-type.co.uk/scripts/latlong.html (http://www.movable-type.co.uk/scripts/latlong.html)
Título: indicar rotacion según coordenadas geograficas
Publicado por: Igor en Mayo 11, 2018, 11:57:58 AM
como dice @Braltor si estas cerca puedes hacelo como si fuera plano.... contra mas cerca estes del destino, menos error habra al calcularlo como si fuera un plano...
Título: indicar rotacion según coordenadas geograficas
Publicado por: Luis M. Refeca Gonzalez en Mayo 16, 2018, 10:43:13 PM
YA vi la documentacion que me puso Braltor al segundo link pues al primero no tengo acceso por ser cubano. ya tengo las formulas para calcular el bearing que viene siendo algo asi como el rumbo desde un punto para llegar al otro pero la cuestion es que para eso necesito una referencia para poder pintar una aguja(linea, rectanguto puntiaguno o algo parecido a una flecha) que indique en k direccion esta un punto con respecto al otro....
 
Mi objetivo es hacer una aplicacion que tomando mi posicion a traves del GSP de mi dispositivo y pasandole la posicion de una antena de Trasmision de Television me indique para donde debo de orientar la antera receptora de mi casa...
 
saludos de antemano
Título: indicar rotacion según coordenadas geograficas
Publicado por: Braltor en Mayo 16, 2018, 11:41:47 PM
Cita de: Luis M. Refeca Gonzalez date=1526503393pero la cuestion es que para eso necesito una referencia para poder pintar una aguja
   


cual es el problema? solo tienes q rotar un sprite o un modelo de la aguja, unity lo dibuja por ti
 
 
 
Cita de: Luis M. Refeca Gonzalez date=1526503393Mi objetivo es hacer una aplicacion que tomando mi posicion a traves del GSP de mi dispositivo y pasandole la posicion de una antena de Trasmision de Television me indique para donde debo de orientar la antera receptora de mi casa...
   


interesante!
Título: indicar rotacion según coordenadas geograficas
Publicado por: Luis M. Refeca Gonzalez en Mayo 17, 2018, 08:26:42 PM
Cita de: Braltor date=1526506907cual es el problema? solo tienes q rotar un sprite o un modelo de la aguja, unity lo dibuja por ti
   
   
       
   
   
      interesante!
   


Lo que sucede es que no tengo acceso a la mejor documentacion para estudiar Unity, yo tengo bien claro lo que quiero hacer solo necesito que me orienten hacia documentos o codigo que no este en http://docs.**** xq no tengo acceso.
 
 1.- Tomar la posicion mediante el GPS del dispositivo.
 
2.- Obtener la posición de la Torre de Transmision de TV desde una BD (luego veremos esrto.)
 
_??????
 
4.- Dibujar una flecha(Objeto k apunte) con direccion a la Torre para saver como oriento mi antena de Recepcion de TV.
 
graciassss
 
Cita de: Luis M. Refeca Gonzalez date=1526581602Lo que sucede es que no tengo acceso a la mejor documentacion para estudiar Unity, yo tengo bien claro lo que quiero hacer solo necesito que me orienten hacia documentos o codigo que no este en http://docs.**** xq no tengo acceso.
   
   
       1.- Tomar la posicion mediante el GPS del dispositivo.
   
   
      2.- Obtener la posición de la Torre de Transmision de TV desde una BD (luego veremos esrto.)
   
   
      _??????
   
   
      4.- Dibujar una flecha(Objeto k apunte) con direccion a la Torre para saver como oriento mi antena de Recepcion de TV.
   
   
      graciassss
   


Creo que si supieramos el codigo que utiliza la aplicaión de la brujula seria un gran paso de avance no creen?????
 
 saludos
Título: indicar rotacion según coordenadas geograficas
Publicado por: Braltor en Mayo 17, 2018, 11:03:30 PM
te refieres a q solo puedes ver documentos en google docs?
Título: indicar rotacion según coordenadas geograficas
Publicado por: Luis M. Refeca Gonzalez en Mayo 22, 2018, 01:53:09 PM
Cita de: Braltor date=1526591010te refieres a q solo puedes ver documentos en google docs?
   


Todo lo contrario, No puedo ver documentos en google docs...
 
Por eso es que estoy mas limitado a la hora de estudiar...  Favor si alguien sabe como funciona la brujula de un movil. O sea como sabe para donde esta el norte??? que funcion devuelve esa información del sensor...y como la compara con la posicion actual para saber para donde apuntar,....
Título: indicar rotacion según coordenadas geograficas
Publicado por: Igor en Mayo 22, 2018, 02:47:39 PM
"Input.compass.trueHeading" te dice (en grados) hacia donde esta orientado tu dispositivo, en relacion con el norte (si estas mirando hacia el Este (exacto) te dara 90, si estas hacia el Sur te dira 180, si estas al oeste te dira 270? ... -90? nose... jeje
 
hay tienes una parte de lo que necesitas
 
(igual tienes que activarlo con "Input.compass.enabled = true"; pero creo que devuelve el angulo invertido.... miralo bien por si acaso)
 
ese es el ejemplo que viene en la documentacion sobre "Input.compass"
 

function Update () {
        // Orient an object to point to magnetic north.
        transform.rotation = Quaternion.Euler(0, -Input.compass.magneticHeading, 0);
    }

 
 
 
y con "Input.location" puedes hayar tu posicion... 
 
luego tendrias que saber las coodenadas del Emisor/antena (del punto hacia el que quieres apuntar)
 
hayas el algulo entre los dos puntos Math.Atan2(puntoHaciaElQueQuieroApuntar - puntoDondeEstoyYo);
 
y le restas los grados que te decia la brujula con "Input.compass.trueHeading;"
 
y estonces dibujas un sprite en pantalla en el angulo que te ha dado.
 
 
 
este es el ejemplo sobre "Input.location" que viene en la documentacion:
 

using UnityEngine;
using System.Collections;
public class TestLocationService : MonoBehaviour
{
    IEnumerator Start()
    {
        // First, check if user has location service enabled
        if (!Input.location.isEnabledByUser)
            yield break;
        // Start service before querying location
        Input.location.Start();
        // Wait until service initializes
        int maxWait = 20;
        while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
        {
            yield return new WaitForSeconds(1);
            maxWait--;
        }
        // Service didn't initialize in 20 seconds
        if (maxWait < 1)
        {
            print("Timed out");
            yield break;
        }
        // Connection has failed
        if (Input.location.status == LocationServiceStatus.Failed)
        {
            print("Unable to determine device location");
            yield break;
        }
        else
        {
            // Access granted and location value could be retrieved
            print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
        }
        // Stop service if there is no need to query location updates continuously
        Input.location.Stop();
    }
}

 
 
Título: indicar rotacion según coordenadas geograficas
Publicado por: Luis M. Refeca Gonzalez en Mayo 23, 2018, 09:31:26 PM
Cita de: Igor date=1526993259"Input.compass.trueHeading" te dice (en grados) hacia donde esta orientado tu dispositivo, en relacion con el norte (si estas mirando hacia el Este (exacto) te dara 90, si estas hacia el Sur te dira 180, si estas al oeste te dira 270? ... -90? nose... jeje
   
   
      hay tienes una parte de lo que necesitas
   
   
      (igual tienes que activarlo con "Input.compass.enabled = true"; pero creo que devuelve el angulo invertido.... miralo bien por si acaso)
   
   
      ese es el ejemplo que viene en la documentacion sobre "Input.compass"
   
   

function Update () {
        // Orient an object to point to magnetic north.
        transform.rotation = Quaternion.Euler(0, -Input.compass.magneticHeading, 0);
    }

   
       
   
   
      y con "Input.location" puedes hayar tu posicion... 
   
   
      luego tendrias que saber las coodenadas del Emisor/antena (del punto hacia el que quieres apuntar)
   
   
      hayas el algulo entre los dos puntos Math.Atan2(puntoHaciaElQueQuieroApuntar - puntoDondeEstoyYo);
   
   
      y le restas los grados que te decia la brujula con "Input.compass.trueHeading;"
   
   
      y estonces dibujas un sprite en pantalla en el angulo que te ha dado.
   
       
   
   
      este es el ejemplo sobre "Input.location" que viene en la documentacion:
   
   

using UnityEngine;
using System.Collections;
public class TestLocationService : MonoBehaviour
{
    IEnumerator Start()
    {
        // First, check if user has location service enabled
        if (!Input.location.isEnabledByUser)
            yield break;
        // Start service before querying location
        Input.location.Start();
        // Wait until service initializes
        int maxWait = 20;
        while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
        {
            yield return new WaitForSeconds(1);
            maxWait--;
        }
        // Service didn't initialize in 20 seconds
        if (maxWait < 1)
        {
            print("Timed out");
            yield break;
        }
        // Connection has failed
        if (Input.location.status == LocationServiceStatus.Failed)
        {
            print("Unable to determine device location");
            yield break;
        }
        else
        {
            // Access granted and location value could be retrieved
            print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
        }
        // Stop service if there is no need to query location updates continuously
        Input.location.Stop();
    }
}

   
       
   


Hola, estoy muy agradecido con esta informacion que me has comprtido ahora mismo lo pruebo  te digo pero desde ya te doy las gracias. Saludos