Como calculo la direccion, un campo 3D, entre 2 puntos?

#1 Febrero 22, 2012, 10:20:47 PM Ultima modificación: Febrero 23, 2012, 05:42:48 AM por brunoxzx
Si usas gm 8.1 puedes usar "point_distance_3d", usando gm8 tienes que hacer tu propio script usando el teorema de pitagoras.

Código (point_distance_3d) [Seleccionar]

//point_distance_3d(x1, xy, z1, x2, y2, z2);
var xx, yy, zz;
xx=argument0-argument3;
yy=argument1-argument4;
zz=argument2-argument5;
return(sqrt(x1*x1+y1*y1+z1*z1));

#2 Febrero 22, 2012, 10:33:14 PM Ultima modificación: Febrero 22, 2012, 10:45:07 PM por Zeit
Hola, al ser 3d la direccion esta dada por 2 angulos en "cordenadas esfericas", busca estas en wikipedia... Saludos.

EDIT: Aqui encuentras la informacion:

Coordenadas esfericas

En el apartado "relacion con coordenadas cartesianas", los angulos theta y phi son los que buscas... Nota: al calcular el arcotanjente usa la funcion de GM para 2 parametros en lugar de usar la de un parametro.

EDIT2: como dice el usuario de arriba, lo que buscas son los angulos en coordenadas esfericas de la diferencia de los puntos (vectores).

EDIT3: los resultados estan dados en radianes, usa las funcines de GM adecuadas para convertirlos a grados si es que esto es mas util para tus intereses.
Saludos Cordiales!!!

#3 Febrero 22, 2012, 11:52:57 PM Ultima modificación: Febrero 23, 2012, 05:43:42 AM por brunoxzx
edit: wtF! leí distancia, perdón ???....

Aunque zeit ya te paso como hacerlo, si necesitas mas ayuda solo vuelve a contestar.

En game maker la programación es en 2D, aunque el juego sea en 3D, solo para comparar alturas es que declaras la variable "Z" y luego comparas dicha variable if z > object0.z {..} ejemplo.
Lo que realmente cambia en un juego 3D cerado con game maker en cuanto a programacion, son los evento Draw, por que no se muestra nada que asignes de inmediato como sprites, backgrounds, solo se muestra lo que indiques en el event draw. De resto la programación es en 2D.

brunoxzx me podes decir como seria un script calculando lo que pido?

ahora les doi una idea de lo que quiero hacer:
Si ha usado alguna vez anim8or, un programa 3D de uso limitado, existe una edicion de "huesos"
aca unas imagenes para que tengan una idea de lo que hablo:




Basicamente lo que quiero hacer es eso: un programa con  :GM8: que pueda editar de huesos.-
Mi problema es que al mover uno de los huesos, los huesos superiores se tendran que mover con un determinado angulo dependiendo del angulo en el que el hueso seleccionado fue girado.

me podrian dar una manito?
si esto me sale bien subo el programa a la comunidad, que de seguro le va a salvar la vida a muchos que no quieren usar lo dll.

#6 Febrero 29, 2012, 03:57:31 PM Ultima modificación: Febrero 29, 2012, 04:08:02 PM por Zeit
Hola, lo que quieres no se hace con direcciones o coordenadas esfericas (bueno, si pero no tan directo), sino con Angulos de navegacion y Matices de rotacion... ya he hecho lo que buscas por dos metodos: con las funciones de rotacion y traslacion de GM en modo 3D y programando las matrices de rotacion para los vertices (extremos de los huesos), lee un poco del tema e intenta programarlo. Saludos.

EDIT: Yo tambien pensaba en hacer un programa para animar modelos 3D (pero como siempre me quede en el diseño visual aunque ya hice que se muevan los modelos), ahora mejor voy a esperar a ahorrar un poco y comprar un kinect para PC, ja!
Saludos Cordiales!!!

Zeit:
Gracias por la data.. pero te molesto de nuevo.
la verdad es que no entiendo mucho el tema. me podrias hacer un ejemplo (3D) muy simple para que te entienda?
porque ya me arte de buscar y buscar sin encontrar lo que quiero.

Hola, la verdad es que no es un tema sencillo, hay que tener conocimientos en geometria, trigonometria y algo de mecanica (esto se usa mucho en mecatronica). No es que no quiera ayudarte pero uso GM8.1 y no es compatible con anteriores por lo que si te hago un ejemplo quiza no te sirva.

Lo que tienes que hacer es:

tienes 3 vertices v0=(x0,y0), v1=(x1,y1) y v2=(x2,y2)
y en consecuencia 2 aristas r1=v0->v1 y r2=v1->v2
quieres rotar a r1 mediante los angulos de navegacion ax1, ay1 y az1
y quieres rotar a r2 mediante los angulos de navegacion ax2, ay2 y az2, pero quieres que r2 no se desconecte de r1 al rotar (por ejemplo la tibia y el perone conectados por la rodilla)

Utiliza las funciones de GM para rotar, trasladar y dibujo:
1. rota r2 con respecto a ax2, ay2 y az2
2. traslada r2 con respecto a r1
3. rota r2 con respecto a ax1, ay1 y az1
4. dibuja r2
3. rota r1 con respecto a ax1, ay1 y az1
4. dibuja r1

Listo, ese es el mecanismo, para mas aristas requieres repetir para cada una de las partes, desde la mas externa a la mas interna, por ejemplo el brazo: primero lo aces para la mano, despues para el antebrazo y por ultimo el bicep (imagina que pasa para por ejemplo la cola de un animal con muchas partes, ja!).

Saludos.
Saludos Cordiales!!!

Si.. entiendo el procedimiento. si no directamente no haria nada en 3D. pero me sale mal lo que estoy haciendo no gira para donde quiero. se que tenes el gm 8.1 pero no importa me lo descargo y ya.. total es para ver el codigo y lo paso a gm8.0 yo mismo. de todas formas si el problema persiste voy a subir el editable para que veas o vean cuel es mi problema en lo que voy desarrollando.
de todas formas te agradesco la data Zeit  :-[

#10 Marzo 03, 2012, 05:00:48 PM Ultima modificación: Marzo 03, 2012, 09:20:12 PM por Zeit
Cita de: romon_28 en Marzo 03, 2012, 04:50:23 PM
Si.. entiendo el procedimiento. si no directamente no haria nada en 3D. pero me sale mal lo que estoy haciendo no gira para donde quiero. se que tenes el gm 8.1 pero no importa me lo descargo y ya.. total es para ver el codigo y lo paso a gm8.0 yo mismo. de todas formas si el problema persiste voy a subir el editable para que veas o vean cuel es mi problema en lo que voy desarrollando.
de todas formas te agradesco la data Zeit  :-[

OK, te hago un ejemplo... espera...

EDIT: Adjunto el ejemplo junto con un ejecutable para que veas el funcionamieno en caso de no tener el GM8.1, espero te sea util.
Saludos Cordiales!!!

Cita de: romon_28 en Marzo 03, 2012, 04:50:23 PM
Si.. entiendo el procedimiento. si no directamente no haria nada en 3D. pero me sale mal lo que estoy haciendo no gira para donde quiero. se que tenes el gm 8.1 pero no importa me lo descargo y ya.. total es para ver el codigo y lo paso a gm8.0 yo mismo. de todas formas si el problema persiste voy a subir el editable para que veas o vean cuel es mi problema en lo que voy desarrollando.
de todas formas te agradesco la data Zeit  :-[
También puedes descargarte lgm y convertirlohttp://lateralgm.org/download.php.

Gracias Zeit, es lo que buscaba.

Ahora solo me queda hacer el editor. Eso si, me voy a demorar un tiempo porque ahora comienzo a estudiar de nuevo y tengo poco tiempo libre -.-

Te voy a agregar en los creditos. Supongo que no te vas a negar  :-X o s?