[Resolvido]Torricceli (Capítulo 1/2)

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[Resolvido]Torricceli (Capítulo 1/2)

Mensagem por saim em Qui 08 Dez 2011, 00:24

Primeira parte
Não, esse tópico não está na seção errada. Não é um tutorial, embora eu dê mais informação do que peça. É mesmo uma pergunta (imensa) em dois capítulos (mais ou menos). Não posso ficar enrolando muito, senão não durmo essa semana, vamos lá.
Como calcular a posição que um objeto que se move sob ação de uma aceleração constante ocupará após um tempo t?
A equação de torricceli diz que:
torricceli escreveu:S = S0 + v0t + 1/2at²
Podemos facilmente substituir o S por y e chegar num sistema de coordenadas mais familiar:
y = y0 +v0y +1/2at²; onde
y = posição atual do objeto
y0 = posição inicial do objeto
v0 = velocidade inicial do objeto
t = tempo decorrido desde o momento inicial
a = aceleração imposta ao objeto
Vou deixar as derivadas e outras considerações mais cabreiras pra segunda parte da pergunta. Por enquanto, vou informar que essa equação NÃO FUNCIONA no game maker. Ela pode funcionar muito bem na vida real (também tem um monte de problemas), mas no game maker não funciona.
Porque? Não sei. Talvez porque a vida real seja feita de muitos infinitésimos de momentos e o computador seja feito de vários pedacinhos de tempo chamado steps. Outra hora a gente discute o PORQUE, mas, por enquanto, satisfaça-se com o seguinte: o game maker usa uma equação simples pra cada momento:
Código:
y = y + v;
v = v + a;
onde v é a velocidade e a é a aceleração.
Veja essa imagem. É um gráfico que mostra a posição "y" em função do tempo, usando torricceli e calculando a velocidade e, em função dela, a posição:Viu a diferença? Faça você mesmo: numa coluna, defina o valor de y em função de t usando a equação de torricceli, numa segunda calcule a velocidade e, numa terceira, calcule a posição em função da posição e da velocidade anteriores.
Nem adianta vir dizer que errei a primeira velocidade ou a primeira posição, eu brinquei pra valer com esses números. Sempre tem uma diferença.

segunda parte
(eu preciso dormir...)
Bom, então qual a equação da posição em função do tempo, no game maker? Quer dizer, eu lanço um objeto e quero saber qual será a posição dele daqui a 20 steps. Preciso calcular step-by-step ou tem uma equação que facilita a vida? Fiz o step-by-step e cheguei numa conclusão. Olha isso aqui:
y(1) = y(0) + v(0); //onde y(0) e v(0) são, supostamente, conhecidos
v(1) = v(0) + a;
y(2) = y(1) + v(1) = [y(0) + v(0)] + [v(0) + a] = y(0) + 2*v(0) + a
v(2) = v(1) + a = [v(0) + a] + a = v(0) + 2a
y(3) = y(2) + v(2) = [y(0) + 2*v(0) + a] + [v(0) + 2a] = y(0) + 3v(0) + 3a
v(3) = v(2) + a = v(0) + 2a + a = v(0) + 3a
y(4) = y(3) + v(3) = [y(0) + 3v(0) + 3a] + [v(0) + 3a] = y(0) + 4v(0) + 6a
v(4) = v(3) + a = [v(0) + 3a] + a = v(0) + 4a
y(5) = y(4) + v(4) = [y(0) + 4v(0) + 6a] + [v(0) + 4a] = y(0) + 5v(0) + 10a
v(5) = v(5) + a = [v(0) + 4a] + a = v(0) + 5a
y(6) = y(5) + v(5) = [y(0) + 5v(0) + 10a] + [v(0) + 5a] = y(0) + 6v(0) + 15a
v(6) = v(6) + a = [v(0) + 5a] + a = v(0) + 6a

Note o padrão. Pegue o multiplicador de V(0) a cada step e o multiplicador de a a cada step
1 1 0
2 2 1
3 3 3
4 4 6
5 5 10
6 6 15
O multiplicador de v(0) é o número de steps. Fácil. E o multiplicador de a? NÃO É 1/2*(numero de steps)²!!! A física é diferente!
Joguei a sequência (0, 1, 3, 6, 10, 15) no excell pra ele encontrar o padrão por mim. Pedi pra ele usar um polinômio de segundo grau. Verifica-se que, sendo t o número de steps, o multiplicador de a é:
1/2t² - 1/2t
Então, no game maker, ao invés de usarmos a fórmula "y = y(0) + v(0)t + 1/2at²", usamos
y = y(0) + v(0)t + (1/2t² - 1/2t)*a; que equivale a
y = y(0) + (v(0)-1/2a)*t + 1/2at²
, o que invalida toda a teoria clássica.

finalmente, a primeira pergunta
Você concorda com isso? Ou eu estou viajando na maionese? Eu quero perverter essa equação ao máximo, então não posso usar a equação errada.
Jogando no excell, funciona, mas eu me sinto como um cachorro correndo atrás do rabo ao fazer isso.

Cenas dos próximos capítulos...
- Como definir um ponto a ser atingido e calcular a velocidade inicial?
- Como derivar essa equação para descobrir o ápice da parábola?
- Inversão do eixo y e uma velocidade que não pode ser negativa: paradoxo?


Última edição por saim em Sex 09 Dez 2011, 17:30, editado 2 vez(es)

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por PedroX em Qui 08 Dez 2011, 17:20

Você concorda com isso? Ou eu estou viajando na maionese? Eu quero perverter essa equação ao máximo, então não posso usar a equação errada.
Eu pensei que houvesse um erro, mas refiz o negócio de várias maneiras e nunca deu certo... Parece que é algo relacionado ao estado inicial (por exemplo, o valor da aceleração, da velocidade, da posição....)

- Como definir um ponto a ser atingido e calcular a velocidade inicial?
Nisso eu posso te ajudar.
Só me diga se é top down ou se é de plataforma (gravidade).
- Como derivar essa equação para descobrir o ápice da parábola?
Não aprendi ainda derivadas, mas dependendo do que for, dá para tentar de outros modos (tem alguns editáveis meus que 'precisavam' de derivadas, mas usei outros modos).
- Inversão do eixo y e uma velocidade que não pode ser negativa: paradoxo?
?

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por Mr. Kaleb em Qui 08 Dez 2011, 17:57

Interessante esse tutorial...
Certa vez eu vi um engine que tinha dos sistemas, o interceptador e o criador. O criador criava circulos que iam na direção escolhida por você em qualquer lugar na room, e o interceptador criava outros circulos que atingiam os criados pelo criador, não importa onde você o colocasse. Realmente impressionante o modo como o sujeito trabalhou esse conceito, acho que deve ter alguma coisa a ver com seu tutorial.

Mr. Kaleb

Ranking : Nota C
Número de Mensagens : 1400
Idade : 19
Data de inscrição : 07/09/2010
Notas recebidas : C
Reputação : 21
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por PedroX em Qui 08 Dez 2011, 18:33

Interessante esse tutorial...
Certa vez eu vi um engine que tinha dos sistemas, o interceptador e o criador. O criador criava circulos que iam na direção escolhida por você em qualquer lugar na room, e o interceptador criava outros circulos que atingiam os criados pelo criador, não importa onde você o colocasse. Realmente impressionante o modo como o sujeito trabalhou esse conceito, acho que deve ter alguma coisa a ver com seu tutorial.
Pelo visto você não leu a primeira linha.
Na primeira já diz que não é um tutorial.

Quanto ao tópico, estou tentando achar o problema, saim.

Enquanto isso, veja essa engine:
http://gmbr.forumeiros.com/t15335-acertar-alvo-com-tiro-parabolico

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por vinians em Qui 08 Dez 2011, 19:03

Amigo o que você precisa é "desvetorizar" o movimento e transforma-lo em relação ao plano cartesiano (Game Maker). Veja sobre isso Aqui
Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por Igor KinGamer em Sex 09 Dez 2011, 09:57

O problema é que você não aplicou a equação corretamente. Você usou a equação da posição como se a aceleração não existisse (MRU - Movimento Retilíneo Uniforme - Δs = vt), e por isso chegou àquela conclusão.
y(1) = y(0) + v(0); //onde y(0) e v(0) são, supostamente, conhecidos
...
Você está dizendo que o y, no step 1, é igual ao y inicial mais a velocidade inicial. Digamos, se o y inicial é 0 e a velocidade inicial é 0, você está dizendo que no step 1 a posição será ainda 0, o que não é verdade se há aceleração.

Veja, a equação da posição é: s = s0+v0t+(at2)/2; e, portanto, a da variação da posição é: Δs = v0t+(at2)/2. Logo, no Game Maker, sendo v a variável da velocidade vertical e a o valor da aceleração, para calcular a variação do y a cada step, fica assim (lembrando que a velocidade ainda não mudou e, de um step para o outro, o tempo é igual a 1):
y += v+a/2;

Então, você deve alterar a velocidade (v = v0+at):
v += a;

Em resumo:
// Step
y += v+a/2;
v += a;

Igor KinGamer

Número de Mensagens : 890
Idade : 21
Data de inscrição : 26/09/2008
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por saim em Sex 09 Dez 2011, 10:22

@Todos: podem ir direto pro final. Eu já tinha escrito MUITO quando o Igor KinGamer postou. O post dele resolveu o problema, mas eu resolvi manter a apresentação do raciocínio que eu vinha elaborando. Agora é tudo inútil, mas fica como justificativa da criação da novela.
Pedrø escreveu:
Você concorda com isso? Ou eu estou viajando na maionese? Eu quero perverter essa equação ao máximo, então não posso usar a equação errada.
Eu pensei que houvesse um erro, mas refiz o negócio de várias maneiras e nunca deu certo... Parece que é algo relacionado ao estado inicial (por exemplo, o valor da aceleração, da velocidade, da posição....)
Não sei se entendi o que você quis dizer. Você achou que houvesse um erro, mas não acha mais? Concorda com a nova equação ou ela nunca deu certo? Ou o que nunca deu certo foi usar torricceli?

Eu fiz e refiz alguns testes, a equação tem funcionado toda vez. Desde que, ao mudar a posição eu use, primeiro "y +=vsp;" e, depois, "vsp += grav;", os valores de entrada também conferem. Usei até uma situação em que a posição não mudava até eu apertar uma tecla, pra comparar os valores passo-a-passo, deu certinho. Comparei com os valores esperados ao usar torricceli, continuava diferente.
quer testar?:
Coloque, num objeto:
>create<
Código:
y = 0;
y1 = 300; //o ponto a chegar num tempo determinado
y0 = y; //ponto inicial
t = 15; //tempo a ser decorrido
tCounter = 0; //contador de tempo
a = -0.5; //aceleração
v0 = (y1 - y0 + 0.5*a*t - 0.5*a*sqr(t))/t; //chega-se a essa conclusão usando a equação do tópico
vsp = v0; //velocidade que vai variar
baixo = y; //a posição mais baixa atingida (pra quando conseguirmos prever v0 com mais eficiência)
como cheguei naquela equação?y1 = y0 + (v0-1/2a)*t + 1/2at²
y0 - y1 + v0t - 1/2at + 1/2at² = 0
v0t = -y0 + y1 + 1/2at - 1/2at²
v0 = (y1 - y0 + 1/2at - 1/2at²)/t
>press space ou step< (evento de atualizar posição)
Código:
y += vsp;
vsp += a;
baixo = max(baixo, y);
tCounter += 1;
>draw<
Código:
draw_sprite(sprite_index, image_index, x, y)
draw_text(20, 20, "tempo= "+string(tCounter));
draw_text(20, 40, "velocidade= "+string(vsp));
draw_text(20, 60, "y= "+string(y));
draw_text(20, 80, "y1= "+string(y1));
draw_line(0, y1, room_width, y1);
draw_line_color(0, baixo, room_width, baixo, c_red, c_red);
Jogue no excell as fórmulas do que se espera em cada passo, aperte a tecla pra atualizar a posição e note que, quanto se passarem 15 steps, a posição será 300 (conforme calculado pela equação)

Pedrø escreveu:
- Como definir um ponto a ser atingido e calcular a velocidade inicial?
Nisso eu posso te ajudar.
Só me diga se é top down ou se é de plataforma (gravidade).
Plataforma. Vi seu link, ainda não entrei (em casa, estou sem internet). Mas, se ele se basear em torricceli, vai dar errado. Use sprites minúsculos e baixa room_speed, pra ver. Passa perto, mas não acerta.

Pedrø escreveu:
- Como derivar essa equação para descobrir o ápice da parábola?
Não aprendi ainda derivadas, mas dependendo do que for, dá para tentar de outros modos (tem alguns editáveis meus que 'precisavam' de derivadas, mas usei outros modos).
É, não precisa mesmo. Lembrei que, na equação da parábola, o "x" do ápice é sempre "-b/2a". Essa é uma conclusão em que se chega através do uso de derivadas, mas estudantes do segundo grau já têm essa conclusão embaladinha pra usar. É que depois, derivar pra chegar às equações meio que vira um vício.
Pra que serve "descobrir o ápice da parábola" é coisa do próximo capítulo dessa novela...

Pedrø escreveu:
- Inversão do eixo y e uma velocidade que não pode ser negativa: paradoxo?
?
É que eu acho que, num dos capítulos à frente, eu vou chegar à conclusão que a velocidade inicial é uma raiz. Raízes têm que ser positivas. Mas pro personagem pular pra cima, na tela, sendo que a gravidade é positiva, a velocidade inicial tem que ser negativa. E aí, a matemática falhou? Deixa pra lá, vamos resolver a validade da equação, primeiro.

@Vinians:
O âmago desse tutorial é questionar o uso de torricceli pra previsão de posição no game maker em games. Suponha, por enquanto, que não exista deslocamento na horizontal, então v0y == v0. O link que você mostrou é muito bom na vida real, onde podemos usar torricceli sem muito erro.
Quanto a perverter torricceli a meu bel-prazer, já estou calejado Smile .

@Igor KinGamer:
Você também está partindo do pré-suposto que o uso da equação de torricceli é válido, o que é justamente o que eu estou questionando. No step inicial, a velocidade é a velocidade inicial. A aceleração ainda não atuou. Daí, atualiza-se a posição e, em seguida a velocidade e, aí sim, a aceleração atuará. É justamente nessa diferença da vida real que eu suponho que resida a origem do problema: na vida real, a aceleração atua o tempo todo.
Veja mais uma vez sua equação:
y += v+a/2;
Quem coloca isso no step? Eu, pelo menos, não coloco. Se bem que, se for fazer torricelli passar a ser válido, vale a pena mudar minha forma de programar. Deixa eu ver aqui...
FUNCIONA SIM!!!! Torricceli estava certo, afinal! Vou ter que mudar TODAS as minhas engines de plataforma, mas isso simplifica MUITA coisa.

Muito obrigado, tópico resolvido, fim da novela! Que bom que só durou um capítulo, achei que seriam 3 capítulos e que a coisa só iria complicar cada vez mais!

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por Igor KinGamer em Sex 09 Dez 2011, 10:47

É, essa história da aceleração atuar o tempo todo na realidade (aliás, tudo atua o tempo todo) é boa pra causar confusão na hora de programar. Mas é aí que o tempo "entra em ação" na equação (ou nas equações): assim como você calcularia onde estaria uma bola, por exemplo, 20 segundos depois de ser solta, aqui você calcula o estado das coisas um step depois do momento atual. A cada step, você responde às perguntas "Onde estará?" e "Qual será a velocidade daqui a um step?".

Igor KinGamer

Número de Mensagens : 890
Idade : 21
Data de inscrição : 26/09/2008
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por PedroX em Sex 09 Dez 2011, 11:12

Mas, se ele se basear em torricceli, vai dar errado.
Não se baseia na equação de Torricelli.
Eu uso aquele método para descobrir o instante em que dois móveis se encontrarão. Daí, eu descubro a velocidade horizontal necessária.
Para descobrir a velocidade vertical, eu determino qual seria a velocidade vertical para que o objeto chegue no ponto (alvo.x, 0), mas eles não podem ter diferença em Y.

Até mais!

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: [Resolvido]Torricceli (Capítulo 1/2)

Mensagem por Conteúdo patrocinado Hoje à(s) 12:31


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum