Gracias Gracias:  5
Página 2 de 2 PrimerPrimer 12
Resultados 16 al 30 de 30

Tema: ayuda con juego de tenis

  1. #16
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    Yo creo que a partir de esta ecuacion tengo casi todo resuelto el tema de la física.
    Para que quede más claro por que no sirven los apuntes de física:
    En todo apunte de tiro parabolico se considera que:
    y = g/2 * t^2 + Voy * te + yo

    cual es el problema? siempre de una manera u otra, Voy es un parámetro establecido o bien lo es t. Ya sea mediante el ángulo del tiro o de la velocidad misma.

    En este caso no es así, por lo tanto no tenemos una simple función cuadratica que despejamos con una resolvente.
    Para resolver esto, lo que se necesita es de alguna forma conocer Voy sin conocer el ángulo del tiro ni la velocidad inicial, todavía no se si es posible, pero lo aclaro para los proximos que entren o alguno de los que entro que me quiera dar una mano.
    Después les dedico el skin de algún jugador
    Saludos!

  2. #17
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    Lo solucione...
    Al final hice un loop que prueba valores, pero de todas maneras es super corto, no da más de 10 vueltas en la mayoría de los casos.
    La idea es primero obtener el ángulo entre la horizontal y la recta que pasa por el punto inicial (Xo, Yo) y el que esta por encima de la red (Xc,Yc).
    Después con ese ángulo obtengo la velocidad para que tenga raíz en el punto final (Xf,Yf).
    De esa forma aumento el ángulo inicial hasta que la curva pase por el punto (Xc,Yc) y listo.
    Aca esta el código por si a algún trastornado se le ocurre lo mismo que a mi:

    A=ATan((Yc#-Yo#)/(Xc#-Xo#))
    Ycn#=0
    While Ycn#<Yc#
    A=A+1
    CosA#=Cos(A)
    SinA#=Sin(A)


    Vo#=((G#*((Xf#-Xo#)^2))/(2*(SinA#*CosA#*(Xf#-Xo#)+CosA#^2*Yo#-CosA#^2*Yf#)))^(0.5)
    Tc#=(Xc#-Xo#)/(Vo#*CosA#)
    Voy#=Vo#*SinA#
    Ycn#=-(G#/2)*(Tc#^2)+Voy#*Tc#+Yo#

    Wend
    Vox#=Vo#*CosA#
    Voy#=Vo#*SinA#

    Gracias a todos por las ideas, si se les ocurre una forma mejor me avisan.
    Saludos

  3. #18
    Miembro
    Fecha de ingreso
    Jan 2009
    Ubicación
    Alicante/España
    Mensajes
    40

    Respuesta: Ayuda con juego de tenis

    Saludos emasg.

    He desarrollado un poco de código con Ninfa3D donde establecemos un vector de impulos (x,y,z) a una esfera, de donde obtenemos la orientación e inclinación.

    Sabiendo que Tan @ = sen @ / cos @, y que sen @ = EjeZ, y cos @ = EjeX, aplicamos la inversa de Tan @ = ( Eje Z / Eje X ) para despejar @ (en este caso, la orientación).

    Para despejar la inclinación, utilizamos la misma fórmula Tan @ = sen @ / cos @, donde sabemos que sen @ = EjeY, y para calcular cos @ debemos obtener la distancia entre el ejece central (sería (0,0)) y el punto (x,z).

    La distancia se obtiene de Raiz cuadrada de la suma de los cuadrados de EjeX y EjeZ (no se considera el otro punto ya que se trata de la posición (0,0)), es decir, (EjeX^2+EjeZ^2)^(1/2).

    Entonces, la inclinación la obtendríamos aplicando la función inversa a Tan @ = ( EjeY / (EjeX^2+EjeZ^2)^(1/2) ) para despejar @ (en este caso, la inclinación).

    Sabiendo la orientación y la inclinación ya podemos obtener el vector de movimiento (utilizaríamos la función MoveEntity() de Ninfa3D). Las funciones las he obtenido de algunas páginas web buscadas con google

    Eje X = VectorX*Cos(orientacion)*tiempo
    Eje Y = VectorY*Sin(inclinacion)*tiempo-4.9*(tiempo2^2)
    Eje Z = VectorZ*Sin(orientacion)*tiempo)

    VectorX, VectorY, VectorZ : Valores (x,y,z) respectivamente, del vector de impulso.

    Al Ejey Y, le he aplicado el efecto de la gravedad donde añadimo (1/2) * 9.8 ( t^2).

    La variable 'tiempo' es un factor que he utilizado para simular la velocidad del sistema de nuestra computadora.

    'tiempo2' es otra variable tipo 'tiempo' acumulativa para simular aceleración.

    Código:
    #Include "Ninfa3d.bi"
    
    dim Shared camera As nCAMERA
    dim As nLIGHT light01 
    Dim Shared As nMESH objeto
    Dim As nSPRITE sprite
    Dim Shared As Byte Lanzar=0
    Dim Shared As Single PosX=0,PosY=5,PosZ=-200
    Dim Shared As Single VectorX=100,VectorY=100,VectorZ=100
    Dim Shared As Single orientacion, inclinacion
    Dim Shared As Single tiempo=0.001,tiempo2=0.001
    
    'Enable vertical synch.
    EnableVsync()
    
    'Starts the Ninfa3D Engine
    InitEngine(640,480,32,0)
    	BackGroundColor(128,128,128)'Background Color
    	AmbientLight(32,32,32)'Ambient color
    
    'Include the file "SampleFuntions.bi.
    'It contains useful features, such as drawing the interface and create the test area.
    #Include "SampleFunctions.bi"
    
    'Create a camera
    camera = CreateCamera()
    PositionEntity(camera,0,64,-280)' Position
    
    'Creates the lights
    light01 = CreateLight(LGT_POINT)
    	PositionEntity(light01,0,128,128)' Position
    	LightRadius(light01,256)' Radius of the light
    	LightCastShadow(light01)
    sprite = LoadSprite("media/glow.bmp")
    	EntityParent(sprite,light01)
    	ScaleSprite(sprite,30,30)
    
    CreateGround()'Creates the test area
    
    'Load mesh.
    objeto=CreateMeshSphere(8)
    scaleMesh(objeto,5,5,5)
    PositionEntity(objeto,PosX,PosY,PosZ)
    
     
    
    Sub MoverObjeto() 
    
    MoveEntity(objeto,VectorX*Cos(orientacion)*tiempo,VectorY*Sin(inclinacion)*tiempo-4.9*(tiempo2^2),VectorZ*Sin(orientacion)*tiempo)
    
    tiempo2+=tiempo
    
    if EntityY(objeto)<0 then Lanzar=0:PositionEntity(objeto,PosX,PosY,PosZ)
    
    End Sub
    
    Sub ActualizarRaton()
     
     If MouseDown(MOUSE_LEFT) Then VectorX+=MouseX()-320+MouseY()-240
     If MouseDown(MOUSE_RIGHT) Then VectorY+=MouseX()-320+MouseY()-240
     If MouseDown(MOUSE_MIDDLE) Then VectorZ+=MouseX()-320+MouseY()-240
     
     MoveMouse(320,240)
     
    End Sub
     
     
    MoveMouse(320,240)
    HideMouse()
     
    
    While(EngineRun)'Returns 1 if the engine is running.
    
    	'Begins scene
    	BeginScene()
     
     If KeyHit(KEY_SPACE) Then
     PosX=EntityX(objeto):PosY=EntityY(objeto):PosZ=EntityZ(Objeto)
     orientacion=Atn(VectorZ/VectorX)*Sgn(VectorX)*Sgn(VectorZ)
     inclinacion=Atn(VectorY/(Sqr(VectorX*VectorX+VectorZ*VectorZ)))*Sgn(VectorY)
     Lanzar=1
     tiempo2=tiempo
     End If
     
     If (Lanzar) Then MoverObjeto() else MoveEntity(objeto,-KeyDown(KEY_LEFT)+KeyDown(KEY_RIGHT),KeyDown(KEY_CONTROL)*(-KeyDown(KEY_DOWN)+KeyDown(KEY_UP)),-KeyDown(KEY_DOWN)+KeyDown(KEY_UP)):ActualizarRaton()
     
     
     
     
     
    
    	'By pressing the "ESCAPE" closes the engine.
    	If KeyHit(KEY_ESCAPE) Then CloseEngine()
    
    	'Update the Engine.
    	'Changing the value (only affects the physics) that will update the
    	'Physical faster or slower.
    	UpdateEngine(0)
    
    	'Displays the interface (FPS and triangles)
    	Interface()
     
     Text(15,80,"Vector:",0,0)'Displays on the screen
     Text(15,90," X: "+Str$(VectorX),0,0)'Displays on the screen
     Text(15,100," Y: "+Str$(VectorY),0,0)'Displays on the screen
     Text(15,110," Z: "+Str$(VectorZ),0,0)'Displays on the screen
    
    	'End the scene
    	EndScene()
    
    Wend
    
    'Ends Ninfa3D Engine
    EndEngine()
    Espero que puedas aprovechar algo del código anterior en tu proyecto.
    Última edición por IsGreen; 16-07-2009 a las 22:12

  4. #19
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    De mi código no me va a servir mucho más que la idea (el ciclo que aumenta el ángulo). Con tu parte llevo mi 2d a 3d.
    Genial! IsGreen. Muchas Gracias
    Última edición por emasg; 17-07-2009 a las 01:12

  5. #20
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    Solucion definitiva!
    Obvie las definiciones y fui directo al bucle principal.
    Es una fusion entre el algoritmo de IsGreen y el mio.

    While(EngineRun)
    cls
    BeginScene()

    If KeyHit(KEY_ESCAPE) Then CloseEngine()
    if MouseHit(MOUSE_LEFT) Then

    orientacion=atn((zF-zO)/(xF-xO))
    inclinacion=atn((yC-yO)/(zC-zO))
    sinO=sin(orientacion)
    cosO=cos(orientacion)

    while yCN<yC 'aumenta la inclinacion hasta dar con el punto encima de la red...
    sinI=sin(inclinacion)
    cosI=cos(inclinacion)

    Vo=((4.9*(zF-zO)^2)/(sinI*cosI*(zF-zO)+(cosI^2)*yO-(cosI^2)*yF))^(1/2)
    Vx=Vo*cosI*cosO
    Vy=-Vo*sinI
    Vz=Vo*cosI*sinO
    TiempoC=((zC-zO)/(Vz))
    yCN=-4.9*(tiempoC^2)+vY*tiempoC+yO
    inclinacion=inclinacion-(3.1415926535897932/180)
    wend
    tiempo=0.01 ':tiempo2=0
    end if
    if tiempo>0 then
    positionEntity(ball,vX*tiempo+xO,-4.9*(tiempo^2)+vY*tiempo+yO,vZ*tiempo+zO)
    tiempo=tiempo+0.01

    if entityY(ball)<0 then tiempo=0:tiempo2=0 'termino el tiro (ni ganas de resetear)
    end if
    EndScene()

    Wend

    Una vez más gracias a todos por los aportes y espero que le sirva a alguien más.
    Saludos.

  6. #21
    Senior Member
    Fecha de ingreso
    Jan 2005
    Mensajes
    279

    Respuesta: Ayuda con juego de tenis

    Pues caronte me habré pasado 3 o 4 pueblos, pero cuando yo hago algo pue lo pieso así, si te gusta bien, y si no ya sabes...

  7. #22
    BlenderAdicto Avatar de Caronte
    Fecha de ingreso
    Dec 2004
    Ubicación
    Valencia-España
    Mensajes
    14,691

    Respuesta: Ayuda con juego de tenis

    Pues intenté hacerte ver en forma coloquial que el tema no es tan sencillo como tú lo quieres solucionar, pero ya que te pones borde, te puedo decir que tu pseudo-código no serviría ni para simular un Pong de 1972 por el simple hecho de que ni siquiera tiene sentido.
    Por otro lado, te digo lo mismo, si no te gusta lo que lees, ya sabes...
    "Algún día todo será digital". Caronte.
    Mi web: NicoDigital.com

  8. #23
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    por ahí te falto un poco de claridad metalthink, yo la verdad que no pude interpretar tu codigo. Igual esta buena la intencion.

  9. #24
    A-team Avatar de Cibertronic
    Fecha de ingreso
    May 2008
    Ubicación
    Peru
    Mensajes
    197

    Thumbs up Respuesta: Ayuda con juego de tenis

    Hola Emasg....

    Realemte muy interesante tu propuesta

    Y si bien es cierto que redescubrir la pólvora no tiene sentido practico, entenderla y estar en condiciones de hacerla si merece la pena, el estudio.

    Si bien resolviste tu problema con físicas yo te dejo aquí mi propuesta utilizando determinantes, la manera más fácil de resolver el problema que planteas.

    Espero también te sea útil mi propuesta... te dejo el ejecutalbe y el código fuente

    espero poder escanearte mis apuntes y subirlos también.

    un saludote y para delante
    Miniaturas adjuntadas Miniaturas adjuntadas ayuda con juego de tenis-shoot.jpg  
    Archivos adjuntados Archivos adjuntados

    Gracias en especial a Ti, que vales muuuho mas que los 30 000
    www.cibertronic.hyperphp.com

  10. #25
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    Gracias Cibertronic, ahora lo reviso.

    EDIT: lo vi un poco apurado en el trabajo, me gustó mucho. Hace lo mismo que mi algoritmo pero sin un ciclo y con cálculos más sencillos.
    Última edición por emasg; 27-07-2009 a las 14:29

  11. #26
    A-team Avatar de Cibertronic
    Fecha de ingreso
    May 2008
    Ubicación
    Peru
    Mensajes
    197

    Lightbulb Respuesta: Ayuda con juego de tenis

    Aquí las notas.... que realice

    Como pueden ver todo se centra en un simple sintema lineal de 3 variables por 3 incognitas....poara los que tenemos un minimo conocimiento de matemáticas superior sabemos que es perfectamente resolvible.

    Pero si alguien todavía ya sea por edad o profesión todavía no las conoce, no se asuste, esos que escribi en el papel, esta en Internet son operaicones tan simples que seguro que están( y si no están deberían )

    yo las resulevo manualmente(reinvento la pólvora) como practicando, porque ya me estaba olvidando el tema este de determinantes

    Y tamiben como pueden ver solo son 3 variables.. a,b,c si las constantes de la ecuacion cuadratica

    Y.. Gravedad, ángulo, velocidad. aunque no lo crean están descritas en y=ax2+bx+c, salvo velocidad, pero esa se le dará desde el programa.


    Excelente EXERCISE.
    Miniaturas adjuntadas Miniaturas adjuntadas ayuda con juego de tenis-notas.jpg  
    Última edición por Cibertronic; 27-07-2009 a las 16:56

    Gracias en especial a Ti, que vales muuuho mas que los 30 000
    www.cibertronic.hyperphp.com

  12. #27
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    jajaja las notas!! te pusiste a hacer todos los cálculos, que grande.
    Habia considerado usar determinantes pero no sabia como plantear las ecuaciones.
    Bueno, voy a tener que reescribir todo mi código

  13. #28
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    Bueno ya lleve el ejemplo a 3d, el problema ahora es que todos los tiros viajan a la misma velocidad. De la forma que lo había hecho antes calculaba la velocidad en base a la trayectoria.
    Igual ya estoy algo perdido.

  14. #29
    A-team Avatar de Cibertronic
    Fecha de ingreso
    May 2008
    Ubicación
    Peru
    Mensajes
    197

    Red face Ayuda con juego de tenis

    ...Hola emasg

    Derrepente te sirva uno apunte más:

    UNA FORMA
    yo para hacer que algo valla más padipo uso el salto
    z=z+1. avanzara de uno en uno
    Z=Z+10 ... Ira de 10 en 10 más rápido aparentemente

    un juego no tiene que ser Realistico, sino creible, es decir debe hacernos creer que es pocible loque estamos realizando..

    OTRA FORMA

    ...No estoy seguro pero leiste algo de derivadas

    si tenemos:
    Y=ax2+bx+c . ecuacion de posición

    podemos derivarlo con respecto a x
    dy/dx= V

    así tendriamos la ecuacion para la velocidad en un punto dado

    ahora bien

    dv/dx=a

    derivando otra ves tenemos la ecuacion para la aceleración respeco a la poscicion..


    si me hubieran dicho que podía haber utilizado esas formulas para hacer un video juego, seguro habría prestado más interés

    ....



    Un saludo
    Última edición por Cibertronic; 28-07-2009 a las 04:05

    Gracias en especial a Ti, que vales muuuho mas que los 30 000
    www.cibertronic.hyperphp.com

  15. #30
    Miembro Nuevo
    Fecha de ingreso
    Jun 2008
    Mensajes
    19

    Respuesta: Ayuda con juego de tenis

    ee! bueno ya quede conforme con la física y se como hacer lo que quiero...ahora me voy a dedicar a modelar los personajes: anim8or, an8tob3d y uvmapper.
    a ver que sale...

Página 2 de 2 PrimerPrimer 12

Temas similares

  1. textura tierra batida pista de tenis
    Por anjinsan en el foro Materiales y Texturizado
    Respuestas: 5
    Último mensaje: 12-08-2009, 09:40
  2. Respuestas: 0
    Último mensaje: 02-07-2009, 07:40
  3. Respuestas: 0
    Último mensaje: 12-03-2009, 21:10
  4. crear pelota de tenis en maya
    Por TRSD en el foro Modelado
    Respuestas: 4
    Último mensaje: 27-10-2008, 16:25
  5. como crear una pelota de tenis 3ds max 6
    Por pixeldesing en el foro Modelado
    Respuestas: 13
    Último mensaje: 25-11-2007, 19:55

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •