RSS Feed Grupo Facebook
Share
IRC
Faq
G-blender
 Login   Registrarse
Bienvenido
INICIO FOROS GALERIA DESCARGAS ENLACES CONTACTO   CHAT IRC

Usuarios revisando este tema :   1 Invitados:





Rotación/traslación sobre un eje cualquiera en python
No es tímido para hablar
Registrado:
24/1/2012 11:19
Desde: Barcelona/España
Grupo:
Usuarios Registrados
Mensajes: 27
Nivel : 3; EXP : 93
HP : 0 / 73
MP : 9 / 477
Ausente
Hola,

Estoy intentando hacer en python que un objeto gire alrededor de otro objeto, como lo hace por ejemplo un planeta alrededor del Sol.

Según he estado investigando se puede hacer con matrices de transalación/rotación... pero estoy seguro que la libreria math debe tener funciones que lo hagan, pero no sé cuales son ni como usarlas.

Alguien tiene algún ejemplo?

Gracias por adelantado.

Enviado el: 21/4/2012 5:43
Transferir el mensaje a otras aplicaciones Transferir a


Re: Rotación/traslación sobre un eje cualquiera en python
G-Blender es mi hogar lejos del hogar
Registrado:
21/12/2004 4:48
Desde: Ciudad Autonoma de Buenos Aires (Colombiano)
Grupo:
Usuarios Registrados
Core
Mensajes: 882
Nivel : 26; EXP : 55
HP : 0 / 638
MP : 294 / 17402
Ausente
Hoal kevek

Lo quieres usar para animar o para game engine?

Enviado el: 21/4/2012 7:40
Transferir el mensaje a otras aplicaciones Transferir a


Re: Rotación/traslación sobre un eje cualquiera en python
No es tímido para hablar
Registrado:
24/1/2012 11:19
Desde: Barcelona/España
Grupo:
Usuarios Registrados
Mensajes: 27
Nivel : 3; EXP : 93
HP : 0 / 73
MP : 9 / 477
Ausente
Para game.

Más concretamente lo que pretendo es controlar este movimiento con las flechas izquierda/derecha del teclado.

El control de teclado ya lo tengo hecho, el objeto se mueve en el sentido que yo le indico, pero necesito que este movimiento hacia izquierda/derecha describa un movimiento circular tomando como eje un punto en el espacio.

Espero haberme explicado bien.

Enviado el: 21/4/2012 10:15
Transferir el mensaje a otras aplicaciones Transferir a


Re: Rotación/traslación sobre un eje cualquiera en python
Simplemente no puede mantenerse alejado
Registrado:
13/3/2011 3:33
Desde: BsAs - Argentina
Grupo:
Usuarios Registrados
Mensajes: 117
Nivel : 9; EXP : 84
HP : 0 / 221
MP : 39 / 2002
Ausente
Ya se que no es la respuesta que estás esperando, pero y si emparentás el objeto a otro invisible (un empty, o algo así) que esté en el centro de rotación y hacés que el teclado controle la rotación de este? Es un workaround, pero por ahí te facilita las cosas...

Por las dudas aclaro: nunca usé el game engine! No es la parte de Blender que maś me atraiga...

Saludos!

Enviado el: 21/4/2012 18:45
Transferir el mensaje a otras aplicaciones Transferir a


Re: Rotación/traslación sobre un eje cualquiera en python
Visitante regular
Registrado:
15/10/2006 1:47
Desde: Madrid, España
Grupo:
Usuarios Registrados
Mensajes: 66
Nivel : 7; EXP : 2
HP : 0 / 150
MP : 22 / 3303
Ausente
Hola kevek, yo creo que es relativamente fácil hacer lo que quieres.


# define el controlador
controller = GameLogic.getCurrentController()

# defines el objeto que mueve el controlador
obj = controller.owner

# defines la cantidad de rotación (X, Y, Z)
rotation = [ 0.0, 0.0, 0.1]

# usas el eje "world"
local = False

# mueves el objeto en el GE
obj.applyRotation( rotation, local)


Saludos

Enviado el: 21/4/2012 20:50
_________________
Lí­nea de gansos en vuelo
al pie de la colina
la luna como un sello

http://www.pawean.com/MVM/index.html
Transferir el mensaje a otras aplicaciones Transferir a


Re: Rotación/traslación sobre un eje cualquiera en python
No es tímido para hablar
Registrado:
24/1/2012 11:19
Desde: Barcelona/España
Grupo:
Usuarios Registrados
Mensajes: 27
Nivel : 3; EXP : 93
HP : 0 / 73
MP : 9 / 477
Ausente
Hola, gracias por vuestras ideas, ya pude hacerlo!

Pero al final opté por la trigonometría.

Primero intenté hacerlo emparentando, desplazando el eje pivote en el centro del objeto del cual quería tomar como eje... y luego hacerle el ApplyRotation, pero me encontré con el problema que si el otro objeto se mueve... arrastra consigo al otro objeto también.

Al final me monté una función en la que uso un sistema de ecuaciones de rotación 2D, a la que le meto la longitud de arco de circunferencia que quiero recorrer y el sentido (-1 para izquierda y 1 para derecha), y me devuelve la nueva posicion (x,y).

def desplazamiento_laterallongitud_arcosentido ):
    
    
posx 0
    posy 
0
    
    x2 
player.position[0]
    
y2 player.position[1]
    
    
x1 enemy.position[0]
    
y1 enemy.position[1]
    
    
radio m.sqrt( (x2 x1)**+ (y2 y1)**)
    
    
angulo longitud_arco radio
    
    angulo 
angulo sentido

    posx 
x1 + ( x2 x1 ) * m.cos(angulo) - ( y2 y1 ) * m.sin(angulo)
    
posy y1 + ( x2 x1 ) * m.sin(angulo) + ( y2 y1 ) * m.cos(angulo)
    
    return 
posxposy


Y la llamada a la función:

import GameLogic as gl
from bge import events
import math 
as m

scene  
gl.getCurrentScene()
player scene.objects["Player"]
enemy  scene.objects["Enemy"]

# keyboard control    
    
keyboard gl.keyboard.events
    
if keyboard[events.LEFTARROWKEY]:
        
player.position[0], player.position[1] = desplazamiento_lateral0.1, -)
        
    if 
keyboard[events.RIGHTARROWKEY]:
        
player.position[0], player.position[1] = desplazamiento_lateral0.1)


En la función, el objeto enemy lo tomo como el eje de rotación, y el objeto player es el que roto alrededor de dicho eje.

Y nada, aquí os la dejo por si a alguien le interesa.

Gracias.

Enviado el: 22/4/2012 11:42
Transferir el mensaje a otras aplicaciones Transferir a






Puede ver mensajes.
No puede enviar mensajes.
No puede responder mensajes.
No puede editar mensajes.
No puede eliminar mensajes.
No puede crear encuestas.
No puede votar.
No puede adjuntar archivos.
No puede hacer un envío sin aprobación.

[Búsqueda Avanzada]





Hospedado por Sandino Networks
Buscar
Buscar en los Foros
Buscar en los Foros
Ingreso
Nombre:

Contraseña:

Recordar



¿Recuperar la contraseña?

Regístrese
Menú
¿Quién está en lí­nea?
3 usuario(s) en línea (1 usuario(s) navegando Foros)

Registrados: 2
Invitados: 1

CHUCHO_M, soliman, más ...
Donaciones
Ayudanos a mantener
G-Blender en linea
haciendo una donacion
voluntaria.