Autor Tema: Calcular coordenadas X e Y donde botará una bola.

0 Usuarios y 1 Visitante están viendo este tema.

12 Diciembre, 2023, 04:22 am
Respuesta #10

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,041
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada

- PuntoXY hacia donde se quiere que vaya la bola. Como dije es el área más izquierda y profunda del área de saque. Cuando el personaje tiene suficiente fuerza puede entenderse como el punto donde se quiere que bote la bola, pero sino no, es hacia donde se quiere que vaya o se acerque, de modo que, si el tiro pudiera continuar, pasaría por ahí.

Hola, como va, Claro ahora tiene sentido,  si tu a priori sabes de donde sale y adonde quieres llegar con un golpe, solo queda como incógnita la velocidad de la bola al inicio y el ángulo de elevación.

En estos día estoy un poco complicado de tiempos, pero quiero leer este hilo y el que iniciaste preguntando por la programación de tu juego , para no evitar detalles.
estuve contestando otros hilos con cosas sencillas de responder, lo tuyo se ha puesto sencillo ahora pero quiero explicarlo de manera detallada y que lo puedas programar. Paciencia quizá alguien se me adelante.

La fuerza es algo que tiene disponible desde antes de golpear la bola, la calidad de sus músculos digamos, de la raqueta, del movimiento (cantidad de impulso que toma), yo lo estoy simplificando o juntando todo en 1 variable que en realidad llamo AlexFuerzadetiros, le puedo llamar MáximaVelocidad si quieres, pero son años y años en que en los videojuegos se le llama fuerza a estas cosas, y no tengo pensado cambiar eso, no le veo el error.

 Tu llámale como quieras , permíteme quizá por buena o mala costumbre seguir insistiendo en que cambies el léxico, entiendo eso de la fuerza en los videojuegos,  Yo le llamaría potencial  si consumo todo el potencial de golpe, en un breve instante estaré una mayor fuerza, si lo gasto más despacio es menos fuerza,  puedes suponer que pegar con fuerza resulte en mayor velocidad, pero como solo la velocidad es lo que importa gráficamente en el juego, es por eso que le doy mas prioridad a llamar a las cosas que te serán útiles por su nombre "velocidad" , te presentaré una o varias fórmulas o algoritmos para calcular la velocidad inicial de la bola para que alex pueda pasar la bola por encima de la red y caiga en el punto que escogiste que caiga. Te adelanto no es única la fórmula sino que hay infinidad de combinaciones de velocidad y ángulo.

Ojala todos los tenistas pudieran pensar así "como se donde quiero que caiga , escojo con que velocidad darle a la bola"... pero digamos que mentalmente preparan el tiro pensando donde aproximadamente quieren que caiga, pero hasta que no golpean,  no sabrán si han sacado un tiro bueno, es decir "luego de que se sabe la velocidad inicial y la direccion de la bola, cualquiera podria decir donde va a caer ,si despreciamos el viento y el rozamiento del aire". Esto último es lo que te he intentado explicar siempre.

Citar
https://drive.google.com/file/d/1vgtRFJsQM9hM9y0qXCqAmuV5yoPqU2Nq/view?usp=sharing

esas direcciones no las puedo ver

Citar
Por supuesto eso sólo si viajas sin conducir, yo viajo en bus, no leas mientras conduzcas xD Sólo las señales de tránsito y cosas así xD

Gracias por el consejo, pensar cómo y qué responder a ciertos hilos y problemas, me hace pasar el rato mientras manejo, que no es tan frecuente pero si muchas horas cada vez, por lo general es ruta libre, aquí hay bastante y entre mate y mate,  en una noche recorro dos veces el largo de tu país,  lo que no hay es señal de móvil, para contestar en el momento que se ocurre una feliz idea, pero tampoco lo haré mientras conduzco, quedate tranquilo.

Saludos
Saludos  \(\mathbb {R}^3\)

14 Diciembre, 2023, 02:45 am
Respuesta #11

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,041
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Hola, veamos , tu tienes la fuerza de tu personaje, yo le llamo velocidad total que tendrá la bola, mas fuerza mas velocidad... nos entendemos no ? ya lo hemos debatido,... bien.

Pero quieres que el tiro cumpla dos condiciones,
que caiga dentro de la cancha en la posición que elegiste que caiga,
y tambien que cuando llegue a la red la supere por encima.

Como primer paso tienes que entender que hay una infinidad de combinaciones de velocidad de bola y ángulo de elevación que te permiten caer en el punto elegido y pasar por encima de la red.

Porque hay muchas? porque si tiro mas elevado, puedo caer en el mismo lugar  tirando un poco mas lento... y pasado un ángulo de elevación de 45° tienes que tirar mas fuerte y tardar mas aun para que la bola bote en el punto indicado.

Bien pero cada tiro hay un ángulo de elevación mínimo que hace que la bola pase por encima de la red sin tocarla, supongamos que una pelota tiene 67mm de diámetro , el tiro tiene que superar la altura de la red mas un radio de la pelota \( r_p=d/2=33.5mm \).

Pero qué pasa, no todo tiro que pase por la altura mínima  de red y que haya sido librado con una velocidad arbitraria , va a caer  en el punto donde escogiste.

Entonces que método usar

Primero con los datos de velocidad y distancias que se tienen hallar el angulo de elevacion para que caiga en el punto elegido. luego verificar que con ese ángulo la pelota pase por encima de la red.

Como se a hace esto? veamos, se me hace difícil seguir tu nomenclatura por extensa

los subíndices $$i$$ los usaré para referirme al momento de golpear la pelota
los subíndices $$r$$ los usaré para  referirme al momento de cruzar la red
los subíndices $$f$$ los usaré para  referirme al momento de tocar suelo

tenemos como dato  $$V$$  la velocidad o fuerza  que la vamos a descomponer en tres direcciones $$x$$ en horizontal (ancho de la cancha), $$y$$ en vertical(largo cancha) y $$z$$ (altura de la pelota respecto del piso.  diremos que $$V$$ se define como

\( V=\sqrt{v_x^2+v_y^2+v_z^2} \) a tí mucho no te preocupa , lo asignas en función el jugador y listo , pero no todas las velocidades te sirven

conoces el punto de partida $$(x_i,y_i,z_i)$$

y tambien el punto de llegada $$(x_f,y_f,r_p)$$ 
$$z$$ no es cero ya que el la altura del piso si lo es pero la pelota tiene su centro  a la altura $$r_p$$ cuando su superficie toca piso.

la dirección del tiro sale fácil el ángulo respecto a la vertical de pantalla sale de   \( \alpha=\arctan\left(\dfrac{x_f-x_i}{y_f-y_i}\right) \)

la distancia sobre la cancha entre el golpe y el pique \( d=\sqrt{(x_f-x_i)^2+(y_f-y_i)^2} \)

para no complicarte la vida para saber de donde viene cada cosa , solo aplica las fórmulas para calcular lo que te indico

todas las medidas $$x,y, z$$  se miden en metros reales, los de la cancha profesional, una vez que tengas tus valores, los haces proporcional a tu pantalla y listo,  en este caso $$g=gravedad=9.8$$

primera fórmula defines la variable

$$c=\dfrac{g^2d^2}{V^4}-1$$

otra

$$b= -\dfrac{gz_i}{V^2}-1$$

y otra

$$a=\dfrac{z_i}{d}+1$$

y las aplicas en esta otra 

$$s=\dfrac{-b+\sqrt{b^2-4\cdot a\cdot c}}{2a}$$

de donde $$\beta$$ el ángulo de elevación sale de hacer $$\beta=\arccos\sqrt s$$

como tu tienes el dato de donde se ubica la red

el tiempo para que la bola llegue a la red es  $$t_r=\dfrac{y_r-y_i}{V\cdot\cos\alpha\cdot\cos\beta}$$

entonces si se verifica que $$z_r+r_p\leq z_i+V\sin\beta t_r-\dfrac{g}{2}t_r^2$$ la bola pasa por arriba de la red...

Si no pasa tienes que aumentar $$V$$, recalcular todo nuevamente, eso hará que $$\beta$$ sea mas grande y pase por arriba de la red.(puedes hacer un loop hasta que verifique entonces $$\beta$$ sería el ángulo de elevación mas chico que hace pasar el tiro por la red,)...

Hay combinaciones de velocidad la cuales no importa el ángulo de elevación nunca tocaran el punto que tu quieres , un tiro normal anda entre 5m/s y 50m/s  de velocidad

La velocidad mínima para alcanzar una distancia $$d$$ lo puede estimar  como $$V_{min}= \sqrt{g\cdot d}$$  cualquier velocidad superior a esa ya te permite que la bola alcance el punto que tu quieres , y de todas esas las posibles velocidades o fuerza  que escojas , habrá algún ángulo chico que tocara red, pero siempre por encima de ese valor habrá un ángulo $$\beta$$ que te permita pasar por encima de la red, cuanto mas chico $$V$$ mas grande $$\beta$$ 


Saludos

Saludos  \(\mathbb {R}^3\)

16 Diciembre, 2023, 04:04 am
Respuesta #12

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
te presentaré una o varias fórmulas o algoritmos para calcular la velocidad inicial de la bola para que alex pueda pasar la bola por encima de la red y caiga en el punto que escogiste que caiga. Te adelanto no es única la fórmula sino que hay infinidad de combinaciones de velocidad y ángulo.
Recuerda que es posible que el personaje no tenga suficiente "potencial" como para que sus tiros pasen la red, imagina que un mago lo puede debilitar. También, por lo que dije en post anteriores puedes comprender que ls combinación que me interesa es en la cual la bola pasa lo más bajo posible (pero encima de la red).

Citar
digamos que mentalmente preparan el tiro pensando donde aproximadamente quieren que caiga, pero hasta que no golpean,  no sabrán si han sacado un tiro bueno, es decir "luego de que se sabe la velocidad inicial y la direccion de la bola, cualquiera podria decir donde va a caer ,si despreciamos el viento y el rozamiento del aire". Esto último es lo que te he intentado explicar siempre.
No sé cómo programar eso. Yo simulo que el jugador sabe cómo hacer buenos tiros, para eso debo hacer que la computadora calcule cómo son.

Citar
esas direcciones no las puedo ver
¿Qué te dice? Es un video en mi Google Drive, un archivo asf, un formato raro de video, pero lo puedo ver en Chrome y en el Media play classic. Lo subo al foro en formato mp4 si puedo... Fijate al final. Edit: No. Pruebo un mpg.

Citar
tu tienes la fuerza de tu personaje, yo le llamo velocidad total que tendrá la bola
No es lo mismo, puede que sobre y use menos de la que tiene.

Citar
que caiga dentro de la cancha en la posición que elegiste que caiga,
Depende, si entra en la cancha entonces que el tiro avance rápido es más importante que el que bote en el fondo. Ya dije que no es que la bola DEBA botar ahí, sólo dirigirse, botará ahí si el personaje tiene suficiente "potencial", sino no. Son 6 condiciones, mencionadas aquí:
https://foro.rinconmatematico.com/index.php?topic=125379.msg511429#msg511429
No quiero que sean muchas pero si sólo se reducen a 2 puede que el resultado no sea el que busco.

No había pensado así sobre el radio, lo que hice fue esto:

Esa cruz no se verá en el juego, pero indica la posición de la bola. Cuando ese punto está en altura 0 significa que tocó el suelo. Si lo hubiera puesto en el centro o bien abajo parecería que la bola está siendo vista desde frente, pero se ve medio desde arriba. No sé si está bien pero por ahora no le vi problema, simplemente puse el dibujo de la bola a distintas alturas cambiándole el tamaño acordemente y según eso para que no toque la red debe estar mínimo a 18.6.

Tus fórmulas las aplicaré en otra ocasión.

17 Diciembre, 2023, 05:34 am
Respuesta #13

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
En el código puse esto:
Código: [Seleccionar]
AnguloXY = Math.atan (DistanciahastaDestinoX/DistanciahastaDestinoY);
DistanciaXY = Math.sqrt (DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY);
C = Gravedad*Gravedad*DistanciaXY*DistanciaXY/Math.pow (AlexFuerzadetiros, 4)-1;
B = Gravedad*BallZ/AlexFuerzadetiros-1;
A = BallZ/DistanciaXY+1;
S = (-B+Math.sqrt (B*B-4*A*C))/(2*A);
AnguloZ = Math.acos (Math.sqrt(S));

¿Todo bien?

Vi más de lo que escribiste pero ¿qué velocidades pongo? No vi que definieras eso. Yo antes hacía:
Código: [Seleccionar]
Norma = Math.sqrt(DistanciahastaDestinoX*DistanciahastaDestinoX+DistanciahastaDestinoY*DistanciahastaDestinoY);
BallXSpeed = DistanciahastaDestinoX/Norma*-AlexFuerzadetiros;
BallYSpeed = DistanciahastaDestinoY/Norma*-AlexFuerzadetiros;
BallZSpeed = 0;

Preciso que me digas qué poner en BallXSpeed, BallYSpeed y BallZSpeed.

Otro día sigo leyendo y aplicando.

Edit: ¿Cómo calculas \( Z_r \)?

Citar
Si no pasa tienes que aumentar \( V \)
Eso sería aumentar el potencial del personaje, que golpeé más fuerte de lo que sus capacidades le permitan, no es lógico, en ese caso lo que hace es intentar que bote más cerca, es decir que el tiro sea más perpendicular a la red, más recto, sin tanta velocidad en X. Si incluso con eso no pasa, entonces simplemente no pasa.

Bueno, pruebo el juego con lo que agregué y te digo qué me da, pero sin especificar las velocidades no es suficiente.

  Variable _level0.Gravedad = 0.01
  Variable _level0.MinsafeBallZ = 18.6
  Variable _level0.AlexFuerzadetiros = 3.975
  Variable _level0.DistanciahastaDestinoX = 133.9
  Variable _level0.DistanciahastaDestinoY = 365
  Variable _level0.DistanciahastaRedY = 248
  Variable _level0.BallXwhenstriked = 417
  Variable _level0.BallYwhenstriked = 548
  Variable _level0.BallZwhenstriked = 45.34
  Variable _level0.AnguloXY = 0.351605787007015
  Variable _level0.DistanciaXY = 388.785557859342
  Variable _level0.C = -0.939455915595726
  Variable _level0.B = -0.885937106918239
  Variable _level0.A = 1.11661955822033
  Variable _level0.S = 1.39606186037174
  Variable _level0.AnguloZ = -1.#IND

Parece que AnguloXY está mal, AnguloZ también.