elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Obtener rápido el valor más cercano a 18.6.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Obtener rápido el valor más cercano a 18.6.  (Leído 445 veces)
Tachikomaia


Desconectado Desconectado

Mensajes: 1.226


Superhacker (es broma xD )


Ver Perfil
Obtener rápido el valor más cercano a 18.6.
« en: 7 Marzo 2024, 13:21 pm »

Un jugador de tenis debe hacer un servicio pero con una técnica le bajaron la fuerza. Inicialmente el cálculo de las velocidades de la bola es:
Código
  1. Norma = Math.sqrt(DistanciahastaObjetivoX*DistanciahastaObjetivoX+DistanciahastaObjetivoY*DistanciahastaObjetivoY);
  2. BallXSpeed = DistanciahastaObjetivoX/Norma*-AlexFuerzadetiros;
  3. BallYSpeed = DistanciahastaObjetivoY/Norma*-AlexFuerzadetiros;
  4. BallZSpeed = 0;
y se aplica este diagrama que queremos mejorar:

Chispa = Inicio.
Verde = True.
Rojo = False.
Azul = Flujo incondicional.
Zona dentro de circulo = El caso que queremos resolver.
Edit: Veo que debería decir cosas como "¿Pasará?", porque el tiro aún no se hizo, la máquina está calculando cómo debe hacerse, pero pronto debo irme así que no quiero editar eso.
También dice tiros VP pero entiéndanlo como V, V importa más que P, abajo explico.

Normalmente la bola pasaría la red, pero en este caso no. En el juego hay en principio 2 tipos de servicio: Veloz y Profundo. En casos como este, en un tiro V las velocidades serían recalculadas de modo que el tiro pase y sea in, no importa cuan profundo bote. En los P sí, se quiere profundidad, por lo que el tiro podría ser más lento y elevado. El ángulo se conserva a menos que no haya otra manera de que el tiro sea in, eso viene más adelante.

Pensando cómo resolver este caso para un tiro V, hice esto:

En la 2nda fila dice que con fuerza 1 lanzando desde punta a punta y con la máxima altura que puede el jugador, la bola pasaría por la red a una altura de -307.05, lo cual significa que no llegaría, no pasaría.
Ese número queremos que sea lo más cercano posible a 18.6, es la mínima altura conque la bola puede llegar a la red sin tocarla. Si es > que eso entonces parte de la fuerza se usó mal (recuerden lo del tiro tipo V), en lo posible no debe ocurrir, pero eso es mejor que obtener uno más bajo.

Fuerza está asignada en el juego.

BallZ when striked (ZInicial), es qué tan arriba se golpea a la bola.

Norma puse arriba cómo se calcula, depende de hacia a donde apunte el humano que juegue.

BallX Speed, BallY Speed y BallZ Speed también las dije arriba.

Duración hastared = REDONDEAR.MAS(248/VelocidadY), donde 248 es la distanciaY hasta la red.

BallZ when Reach Red = ZInicial-Duración*(Duración+1)/200+BallZSpeed*Duración
La velocidad de la bola hacia abajo (Z) aumenta 0.01 por frame, las fórmulas de Física no funcionan aquí porque por lo que vi en esas la 1era vez la velocidad disminuye la mitad de lo normal.

En las filas de abajo se modifica la duración y se recalculan las velocidades. Buscando el valor más óptimo de "BallZ when Reach Red".
Cuando la duración "incrementa 0", el resultado no puede empeorar, lo que sucede es que como en el juego sólo importan ciertos instantes (frames), entonces si la bola llegó un poco antes, digamos en 1.45 segundos, es irrelevante porque sólo se considerará el 1.4, 1.5, etc, entonces bajar un poco las velocidades XY da el mismo resultado y eso permite aumentar un poco la velocidad Z, haciendo que la bola vaya un poco más hacia arriba. Es lo que se quiere en este caso al fin y al cabo, que pase más arriba.
Resultado con fondo verde = El mejor hasta ahora (se mira desde arriba a abajo, el mejor de todos es el verde de más abajo).
Con fondo rojo = Empeoró.
Fondo amarillo = Mejoró pero no es lo mejor obtenido hasta ahora.
El método no lo programé pero sería algo como:
Si el resultado mejora:
  A la duración incrementarle el doble de lo que se incrementó antes.
sino
  Usar la duración intermedia entre la que dió el mejor resultado y la...
Pero este método parece muy largo, o puede serlo, además es medio en vano parece hacer tantos cálculos si no hay modo de que pase, habrá que acercar el target (apuntar más al medio y abajo), así que ¿qué otro puedo usar?


« Última modificación: 9 Marzo 2024, 18:52 pm por Tachikomaia » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como Obtener valor de un textbox, desde un valor, hasta otro valor [VB6]
Programación Visual Basic
revenge1252 4 6,354 Último mensaje 17 Julio 2012, 09:38 am
por BlackZeroX
Obtener valor del pixel
.NET (C#, VB.NET, ASP)
Finrael 1 3,495 Último mensaje 16 Junio 2012, 18:22 pm
por Maurice_Lupin
Obtener un valor variante
.NET (C#, VB.NET, ASP)
#Aitor 3 2,608 Último mensaje 29 Mayo 2014, 01:39 am
por elezekiel
obtener el valor de comboBox
.NET (C#, VB.NET, ASP)
d91 1 2,350 Último mensaje 28 Octubre 2015, 21:16 pm
por d91
Obtener un valor de un json con php
PHP
lucheano 4 7,220 Último mensaje 25 Noviembre 2017, 05:28 am
por lucheano
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines