Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

[RESUELTO] Problema al comparar Vectores 2d

Iniciado por Ferno, Febrero 13, 2016, 02:46:29 PM

Tema anterior - Siguiente tema
Febrero 13, 2016, 02:46:29 PM Ultima modificación: Febrero 14, 2016, 05:30:37 PM por Ferno
Hola a todos, tengo un problema al comparar 2 vectores, al inicio me da true, pero luego me da false (parece que controla si también se trata del mismo objeto). quisiera que de true porque son iguales, pero no se porque funciona solo una vez.
parte de codigo:

Debug.Log ("dest == trans: " + (dest == (Vector2)transform.position) + " - dest: " + dest + "; - trans: " + (Vector2)transform.position);

log:
dest == trans: True - dest: (14.5, 14.0); - trans: (14.5, 14.0)
dest == trans: False - dest: (14.5, 14.0); - trans: (14.5, 14.0)
dest == trans: False - dest: (14.5, 14.0); - trans: (14.5, 14.0)
Me pueden dar una mano?Saludos...

imagino que sera una especie de chiste nuevo ... poner solo el log y pedir ayuda de porque cambian los valores xD

Febrero 14, 2016, 01:40:12 PM #2 Ultima modificación: Febrero 14, 2016, 01:40:49 PM por juanma_teso
Ten en cuenta que aunque parezca que dos floats son iguales puede que en el cuarto o anterior decimal cambien, y ya no van a cumplir la condición, peeero sin ver más código imposible saber si sea ese error...

Utiliza Vector2.dot o Vector3.dot para el producto entre los dos vectores (normalizados / normalized). Si el valor es 0, son iguales. Cuánto más cerca estén de 1/-1 más parecidos serán, pero no iguales. Ese margen lo puedes utilizar para comparar si son "parecidos".

Febrero 14, 2016, 05:29:29 PM #4 Ultima modificación: Febrero 14, 2016, 08:41:17 PM por Ferno
[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35141" data-ipsquote-contentcommentid="127084">Utiliza Vector2.dot o Vector3.dot para el producto entre los dos vectores (normalizados / normalized). Si el valor es 0, son iguales. Cuánto más cerca estén de 1/-1 más parecidos serán, pero no iguales. Ese margen lo puedes utilizar para comparar si son "parecidos".[/quote]Gracias por la ayuda, vi que el producto me daba un valor float alto (creo 406.xxxx), pero gracias a ti me fije la documentación del Vector2 de Unity, y opte por usar Vector2.Distance que me da un float entre 0 y 1, así que el problema esta resuelto :)
								

Normalizaste los vectores con normalize antes de aplicar el dot? O sea, algo así de memoria, Vector2.dot(v1.normalize, v2.normalize) ??

[quote author=iRobb" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="35141" data-ipsquote-contentcommentid="127102 date=1455490419]Normalizaste los vectores con normalize antes de aplicar el dot? O sea, algo así de memoria, Vector2.dot(v1.normalize, v2.normalize) ??[/quote]Acabo de probar usando normalized en cada vector y el resultado de la función es entre 1 y 0 (1, 0.99xx), pero si comparo el resultado diciendo que es menor o igual a 1f, me sigue dando false. Así que mejor seguiré usando Vector2.Distance. Gracias de todas formas.Saludos...

Etiquetas: