Salvo que se intentara hacer o modificar un programa sobre tales demostraciones, pero el que estoy haciendo no es sobre eso, y sin embargo es bastante complicado hacerlo bien si no aprendo de ese tema.
Luego de calcular una variable llamada Excess (en el programa que estoy haciendo), se inicia un proceso que tiene sentido sólo si Excess < 0. Hice muchas pruebas y siempre es < 0. Pero no sé si lo es (necesito aprender más de matemática para "demostrármelo", estar más seguro). Entonces, puedo hacer que el proceso se aplique sólo en ese caso, y sino que se aplique otra cosa, pero tendría que pensar qué cosa, y además, si es imposible que se aplique esa cosa, no tiene mucho sentido que esté en el programa, ni pensar qué sería.
Este tema es sobre demostraciones matemáticas, que me ayuden con eso.
Supongamos que Excess fuera X*X
¿puede ser < 0?
Nop, porque si X es P (positivo), Excess será P, y si es N (negativo) será P. Sino puede ser 0, pero no N. Teóricamente no hay necesidad de poner un código "si Excess < 0" ¿no?
Claro mi caso no es tan sencillo... fijense si Excess puede ser 0 o > 0.
Excess = -374.6+ShotTZ*Math.abs(_level0.BallYSpeed)
Math.abs significa el absoluto del número.
A los textos "_level0." no les den bola.
Rangos (aprox) de las variables independientes:
_level0.AlexPow: 1 ~ 10
_level0.DistanciaX: 31.7 ~ 236
_level0.BallZ: 43 ~ 67.85
Norma = Math.sqrt(374.6*374.6+_level0.DistanciaX*_level0.DistanciaX+_level0.BallZ*_level0.BallZ);
_level0.BallYSpeed = (374.6/Norma)*-_level0.AlexPow;
_level0.BallZSpeed = (_level0.BallZ/Norma)*-_level0.AlexPow;
Abrev = (200*_level0.BallZSpeed-1)*(200*_level0.BallZSpeed-1);
ShotTZ = Math.ceil(((200*_level0.BallZSpeed-1)+Math.sqrt(Abrev+800*_level0.BallZ))/2);
Y aquí vendría Excess.
Math.ceil convierte el número al entero mayor más cercano.
Math.sqrt es raíz cuadrada.
Eso. ¿Puede Excess ser 0 o > 0?
Acá tienen una tabla de Excel que tiene las fórmulas y varios casos, si es que les sirve (a mí para esto no me ha servido mucho, creo que es un problema más de lógica que de hacer operaciones rápido):
http://www.fileserve.com/file/HTVWmND/Libro6.xls
Ah, y si es "demasiado de matemática", en el sentido de que no corresponde a este foro, perdón, pero en foros de matemática no me respondieron, y en otro me recomendaron que posteé en foros de videojuegos XD
¿que queres calcular? ¿importa si Excess es negativo?
No uses números sueltos metelos en constantes.
Cuando uno escribe un post preguntando en un foro, tiene que dedicarle tiempo a que se entienda bien el mensaje. Tiene que ser corto. No podes esperar que otros se tomen el tiempo en entender lo que vos no te molestaste en explicar.
Creo haber explicado lo necesario, y bastante resumido (lo pongo en negrita porque creo que sería al dope leer esto). Lo que se me ocurre para que entiendas es que yo sea más específico, aquí voy.
Intento hacer un videojuego de tenis y en él quiero que cuando un personaje hace un saque su fuerza se reparta de forma "realista". Me refiero a que si la fuerza es 10, NO se reparta así: 3.33 hacia adelante, 3.33 hacia la derecha, 3.33 hacia abajo, ni de otra forma NO "realista" (no soy experto en el tema, no sé qué es realmente "realista", pero bue...). Esa condición está cumplida, puedes verlo en el código que puse, donde se define BallYSpeed y BallZSpeed. No defino BallXSpeed porque las velocidades antes mencionadas podrían disminuir, y si lo hacen tendría que recalculala. ¿Por qué pueden disminuir? Porque también necesito que en el saque la pelota pase por encima de la red, caiga 0.01 por instante, y que cuando llegue al suelo sea en un punto preespecificado, así que yo las hago disminuir a propósito, para que cumplan todas las condiciones mencionadas. Primero, como dije hallo las velocidades Y y Z. Pero eso aparentemente hace que los tiros caigan siempre antes del punto preespecificado. Eso es lo que marca Excess; si Excess es negativo, significa que el tiro caería antes del punto preespecificado. Luego de hallar Excess, puse un código (no aquí) que corrige el problema si Excess es negativo, si no es no sé qué tengo que hacer y como dije no tiene sentido que lo piense si es imposible que Excess no sea negativo. Basicamente lo que hago es reducir la fuerza aplicada hacia abajo, para que la pelota caiga más adelante, y justito en el punto preespecificado. Pero eso gralmente hace que no pase por encima de la red, así que hago otra corrección y así, más o menos sucesivamente, tras varias correcciones logro que se cumplan todas las condiciones. Ahora bien, volviendo a donde se halla Excess: ¿Qué pasa si es 0 o positivo? Si es 0, NO habría que disminuir la fuerza aplicada hacia abajo (te recuerdo que, en caso de que Excess sea < 0, sí se disminuye la fuerza), y si (Excess) fuera mayor, había que aumentarla (a la fuerza aplicada hacia abajo). Yo podría hacer 3 o 2 ifs: Si Excess es mayor 0, hacer tal cosa, sino si es menor que 0, tal otra, sino, otra. Pero es bastante enredado, habría partes del código que se repetirían y no me gusta usar Functions, punto. Además, como ya dije, es inútil poner un caso de "si Excess es 0" y "si Excess es > 0", si Excess NO puede ser 0 o > 0. Mi pregunta es: ¿Puede serlo? Yo no sé mucho de matemática pero supongo que para responder hay que ver cual es el rango de las variables independientes, que lo/as dije en mi 1er post de este tema. Y también hay que saber cómo determinan a Excess, que también lo dije, so ¿qué más debo decir? Incluso dí un ejemplo sencillo, pero te doy uno más complejo (pero que supongo se entenderá mejor):
Supongamos que Excess es X+Y
Si te pregunto si Excess puede ser 0 o > 0, me dirás "depende de X e Y". Bueno, si te digo que los rangos son:
Y: -10 ~ -4
X: 1 ~ 3
entonces la respuesta es...
No, porque, intentemos que sea positivo:
Tomo el número más positivo que pueda ser Y: -4
Y tomo el más positivo que pueda ser X: 3
Al sumarlos, me da -1, ergo, Excess no puede ser positivo, y de hecho tampoco 0; -1 es lo máximo que puede ser.
PERO CLARO EL CASO POR EL QUE PREGUNTO ES MÁS DIFÍCIL, porque reducir los valores no necesariamente causa que se reduzca Excess ni que aumente, es como una "parábola" así: ~~~~~~
------------------------------------------------------
"No uses números sueltos metelos en constantes"
No sé a qué te refieres.
1º y principal: Fileserve no funca mas
http://www.abc.es/20120404/tecnologia/abci-fileserve-wupload-hollywood-201204041434.html
2º No entiendo adonde queres llegar con el realismo:
La pelota cae en un punto "predefinido" WTF?
Eso no es realista!!
La pelota cae donde la fuerza del golpe, el angulo de la raqueta, la friccion del aire, etc. lo determine...
Jajaja demasiada fisica "realista para calcular" !!!
Fuck you!
Asi q la solucion (psycho) de Tachi es "predefinir" donde va a caer la pelota y...
... hacer todos los p*tos calculos de fisica para q la trayectoria sea la q ya definiste (hiper WTF)
Para q la calculas si ya sabes donde va a caer???? ¬¬
No se me ocurre una buena analogia pero es cmo si alguien quisiera calcular cuanto se llena un balde en 2 minutos. Pero el tipo ya decidió que a los 2 minutos va a haber 14 litros en el balde. Asi que hace todos los calculos, segundo a segundo, abre y cierra la canilla, hasta q logra los 14 litros en justo 2 minutos.
O sea, vos sos el amo de tu cancha de tenis. Vos sos el Dios del tiempo y el espacio.
¿Queres q la pelota caiga ahi? Cae ahi!
¿En tal tiempo? ¿Cuanto es en frames? Q distancia? Distacia/frames
Cae antes de la red? Hacé q caiga despues!!!
Qien te lo impide???!!!!! Tnes miedo de ir al inframundo por no seguir la fisica newtoniana en un garlopa juego flash hecho en flash 5????? Who care!
Por cierto, si el juego es visto de costado, es super re pedorro, lo siento.
Asi q manejate con estos datos, implotá todo el proyecto o segui enredado en esas algas matematicosas...
À votre santé
Ya me iba a dormir, tenía sueño, pero después de ver tu mensaje purple... digamos que no puedo dormir tranquilo, hasta que te responda.
Lo de Fileserve te lo agradezco, cuando lo puse no me aparecía el cartel que ahora sí.
La pelota cae en un punto predefinido, sí, lo define el jugador, eligiendo qué tipo de tiro usar (aunque por ahora es 1 solo: Profundo) y hacia dónde dirigirlo (3 direcciones: Izq, der o centro). Más adelante en el programa le agregaré variaciones que harán que pueda caer más lejos de ese punto, pero ta ¿qué es lo raro? Yo aclaré que no es del todo realista, pero... a ver ¿cuando jugás al fútbol no apuntás a cierto lugar del arco o la cancha? Luego no salen tan hacia ahí, pero... a ver ¿cómo lo programarías? Yo hago primero lo que sería el tiro ideal, y después le pongo las variaciones. ¿Tú haces una especie de big random simplemente? Si es un juego de tenis, los tiros caerán fuera la mayoría de las veces, y eso no me gusta (si a ti sí, bárbaro, pero es mi juego para mí y para el que lo quiera así, no tiene por qué gustarte). Compará el Mario Tennis de GBC con el Super Family Tennis de SNES, a ver si entendés un poco más.
Jajaja demasiada fisica "realista para calcular" !!!
Fuck you!
Considerando esas palabras, creo que ya he hablado demasiado contigo. Una lástima (o no, porque es bueno ver la realidad) porque me empezabas a caer bien.
Mas o menos creo que entendi lo que estas haciendo...
Me parece que tenes que simplificar mas las cosas para poder utilizar las ecuaciones de proyectiles. Primero las ecuaciones de proyectiles del liceo utilizan aceleración constante, no se en tu caso que le estas poniendo como rozamiento. En un juego de tenis te diria que le saques el rozamiento y solo la apliques cuando pica(teniendo en cuenta que solo se aplique una vez por picada).
No se como estas trabajando las coordenadas pero te lo pongo como que X e Y son los ejes "paralelos" al plano. Z es la altura de la pelota.
Tenemos esto para trabajar:
x(t)=Xi + Xvi*t+(A*t*t)/2
donde Xi es la pos inicial, Xvi es la velocidad inicial y A es la aceleración.
Y la derivada de esto nos da
v(t)=Xvi+A*t
esto lo tenes que aplicar a los tres ejes por separado. En el de la Z la aceleración es la gravedad 9.8 o -9.8 dependiendo de tus coordenadas. Y en los ejes X e Y lo mejor es poner aceleraron 0 o algo constante.
Supongamos que queremos que la pelota pique en una pos y que su altura maxima en el recorrido sea maxAlt.
Sabemos que cuando llegamos a la altura maxima la velocidad en ese eje es 0.
Entonces:
v(t)=0=Vzi+A*t;
t=-Vzi/A;
Vzi es la velocidad inicial.
Lo sustituimos en la primera ecuación teniendo en cuenta que el t que calculamos en cuando la pelota esta en lo mas alto.
z(t)=Zi + Vzi*t +(A*t*t)/2;
pasa a ser
maxAlt=Zi + Vzi*(-Vzi/A) +(A*(-Vzi/A)*(-Vzi/A))/2;
maxAlt=Zi -Vzi*Vzi/A + (Vzi*Vzi)/2A;
maxAlt=Zi -Vzi*Vzi/2A;
Vzi*Vzi/2A=Zi-maxAlt;
Vzi*Vzi=(Zi-maxAlt)*2A;
Vzi=sqr((Zi-maxAlt)*2A);
Ojo pude que en algun paso me saltie algo.
Ahora que tenemos Vzi podemos calcular el tiempo
t=-Vzi/A es el tiempo que demora en subir, si lo multiplicamos por dos nos da el tiempo en que demora en subir y bajar al mismo punto en Z.
Por las dudas vamos a verificar =)
z(t)=Zf=Zi +Vzi*t +A*t*t/2;
del liceo para resolver ecuaciones del estilo aX*X+bX+c=0;
t=(-Vzi +-sqr(Vzi*Vzi-4*(Zi-Zf)*A/2))/(2A/2);
si Zinicial=Zfinal
t=(-Vzi+-Vzi)/A;
t=0 o t=-2Vzi/A;
ahora calculamos las velocidades en X e Y con el tiempo, como tiene que llegar al punto que queremos calculamos la distancia entre nosotros y ese punto en cada eje(X e Y).
deltaX = Vxi*t;
Vxi=deltaX/t;
Vyi=deltaY/t;
Donde el delta es la distancia. Si le aplicas esas velocidades y solo le pones aceleración a Z tendría que andar. Tene en cuenta que podes atar varias variables y calcular el resto en función de esas otras.
Te aclaro por si crees que estudié proyectiles en el liceo: No que yo recuerde (no hice mats de 6to, quizás es por eso).
Rozamiento no le estoy poniendo, pero que lo haya cuando pique me gustó (aún no había pensado cómo se frenaría la pelota).
Uso los ejes de la forma que dijiste.
Lo demás no lo entiendo mucho, lo siento. Y estuve más de media hora intentando entenderlo y me hace doler el estómago o algo por ahí, el intentarlo, e incluso me dan ganas de llorar XD como si estuviera haciendo algo que no quiero o que no me parece lo que debo hacer (si me dicen: LLega volando hasta la cima de aquél edificio, es obvio que, si lo intento, no me sentiré bien). Igual, lo pensaré un poco más (parte ya lo había escrito):
¿La primera fórmula la tengo que aplicar o fue una base y para mostrarme de dónde viene la próxima?
Si la tengo que aplicar ¿Xvi es 0 o qué?
Si es 0:
x(1) = 460 + 0*1+(0*1*1)/2 = 460
x(2) = 460 + 0*2+(0*2*2)/2 = 460
por esto, no creo que hayas dicho que sea 0.
¿Cómo calculo Xvi? Despejarla no parece fácil y además x es incógnita. ¿La calculo a mi manera? Me cuesta creer eso.
Segunda fórmula:
Aclaro por las dudas: Sobre lo que es una derivada no recuerdo que la profe dedicara mucho tiempo a enseñar, y lo que leí ahora no lo entendí del todo.
De nuevo tengo Xvi, dejá quieto...
Para mí, con lo que me implica intentar entender ese estilo (que es el más realista supongo, pero igual es un estilo), no es simplificar las cosas. Lo que tengo hecho funciona como me gusta (o como me da la cabeza para entender, y bue...), simplemente quiero saber si puede ocurrir que Excess sea 0 o > 0, como ya expliqué.
Te agradezco pero como dije me causa malestares varios.
La tabla de Excel que estaba en Fileserve:
https://rapidshare.com/files/923537707/Libro6.xls
private const MAXALT:Number=2;
private const GRAVITY:Number=-9.8;
function hitBall(ball:Ball, bouncePoint:Point):void
{
var Vzi:Number = Math.sqr((ball.z-MAXALT)*2GRAVITY);
var totalTime:Number = -2Vzi/GRAVITY;
var deltaX:Number = bouncePoint.x-ball.x;
var deltaY:Number = bouncePoint.y-ball.y;
if(totalTime > 0){
var Vxi:Number = deltaX/totalTime;
var Vyi:Number = deltaY/totalTime;
ball.velocityX = Vxi;
ball.velocityY = Vyi;
ball.velocityZ = Vzi;
}
}
Te paso mas o menos las partes que precisas, lo hice como si fuera AS3. No lo complile esta echo nomas a ojo. Capas que se puede hacer de otra forma, la idea es no reinventar la rueda. Y si lo haces de tu forma es mas difícil saber de donde sacaste las cosas y como se comportan esas funciones que pusiste. Las funciones se usan en proyectiles, pero no son exclusivas de proyectiles
Movimiento rectilineo uniformemente acelerado.
En la fisica del liceo seguro que lo viste. En internet seguro que encontras ejercicios resueltos para aprender a trabajar con las funciones. Ademas tenes mas funciones que son combinaciones de las anteriores, que te dan la velocidad final, o cosas por el estilo.
Practicamente nunca usé Functions, pero intentaré probar lo que hiciste si no encuentro solución pronto a mi problema.
De física lo único que recuerdo haber dado es, practicamente nada de magnetismo, y DEMASIADOS ejercicios de calcular cosas en los circuitos.
Edit: Ah quizás en 3ero, hace como 10 años, cuando lanzábamos un autito por una rampa, y calculabamos velocidad y todo eso.
@Tachikomaia escribió:
quizás en 3ero, hace como 10 años, cuando lanzábamos un autito por una rampa, y calculabamos velocidad y todo eso.
Ojalá hayas sido mejor alumno que éste. :P
Eeeem... si recientemente me enseñaron a hacer los cálculos, supongo que sería mejor alumno que ese, sí, pero en este momento, también me sacaría un 0. Lo de la rampa (curva) me lo acuerdo en parte porque cuando le dije a mis padres que precisaba una me dijeron que era muy difícil conseguir, pero aún está tirada por alguna parte... También recuerdo que para resolver algunos ejercicios (no sé si de física) había que tener calculadora científica, y nunca me quise comprar una, me molestaba que exigieran eso.
You must log in to post.