Colisão de esferas

Secção dedicada à linguagem de programação favorita dos quarkianos: Python!

Colisão de esferas

Mensagempor ruifm em Domingo Jan 22, 2012 4:50 pm

Eu ainda sei muito pouco de vpython por isso estou-me a ver em dificuldades numa parte da minha simulação.
Em termos gerais, tenho um cubo, e dentro do cubo tenho 2 bolas (balll, e ball2) com uma dada posição e velocidade inicial. O movimento delas rege-se pelas leis do movimento (com g=9.8 ), estando acompanhadas de um "rasto", e um vector de velocidade. Posso ainda mudar o coeficiente de restituição, para as bolas gradualmente perderem velocidade.
Tudo o que me falta é a parte da colisão. Já consigo fazer com que ele detecte a colisão:
Código: Seleccionar Todos
while True:
    rate(100)
    d = sqrt((ball.pos.x-ball2.pos.x)**2 + (ball.pos.y-ball2.pos.y)**2 + (ball.pos.z-ball2.pos.z)**2)
    if d <= 2*r:
        ball.vel=-ball.vel
        ball2.vel=-ball2.vel

só que ele não inverte a velocidade. As bolas ficam A "tremer" juntinhas...paradas
Imagem

Ah, e eu sei que para ser realista não posso apenas inverter o vector velocidade :inocent: , mas numa primeira fase é o que eu quero que o programa faça.
Também queria saber se dá para o computador dar valores aleatorios dentro de um intervalo, para por exemplo fazer com que a bola apareça num ponto aleatorio do cubo, com uma velocidade aleatoria.
E também se dá para fazer alguma coisa do estilo: introduzir o valor de n e o programa fazer o movimento da 1ª bola para n bolas, todas com posição inicial e velocidade radom dentro de um certo intervalo. Isso seria exelente.
"Everything is determined, the beginning as well as the end, by forces over which we have no control." - Albert Einstein
Avatar do utilizador
ruifm
down-Quark!
down-Quark!
 
Mensagens: 205
Registado: Segunda Jan 16, 2012 12:04 am
Localização: Lisboa - IST

Re: Colisão de esferas

Mensagempor filipematos em Domingo Jan 22, 2012 6:07 pm

Eu não percebi muito bem o que é que estás a simular, explica um pouco melhor. Em relação aos aleatórios tu podes utilizar funções do módulo random http://docs.python.org/library/random.h ... ght=random, Por exeplo:

bola.pos.x = randint(1,4)
bola.pos.y = randint(1,4)
output:
bola.pos = (2,3), por exemplo
E o mesmo para a velocidade. Não consigo perceber o que perguntaste a seguir ...
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Colisão de esferas

Mensagempor ruifm em Domingo Jan 22, 2012 6:25 pm

filipematos Escreveu:Eu não percebi muito bem o que é que estás a simular, explica um pouco melhor. Em relação aos aleatórios tu podes utilizar funções do módulo random http://docs.python.org/library/random.h ... ght=random, Por exeplo:

bola.pos.x = randint(1,4)
bola.pos.y = randint(1,4)
output:
bola.pos = (2,3), por exemplo
E o mesmo para a velocidade. Não consigo perceber o que perguntaste a seguir ...

obrigado pela solução dos valores aleatorios, funcionou lindamente.
Imagina uma caixa com um gás lá dentro. Imagina que as particulas de gás são "bolas". Eu queria simular o seu movimento, as suas colisões, tanto para 2 bolas, como para n bolas, sem repetir a programação toda cada vez que quisesse adicionar mais uma bola... Depois queria que o programa me indicasse o nº de colisões, os tempos da colisão, e talvez as suas posições.
"Everything is determined, the beginning as well as the end, by forces over which we have no control." - Albert Einstein
Avatar do utilizador
ruifm
down-Quark!
down-Quark!
 
Mensagens: 205
Registado: Segunda Jan 16, 2012 12:04 am
Localização: Lisboa - IST

Re: Colisão de esferas

Mensagempor filipematos em Domingo Jan 22, 2012 6:47 pm

Ah já percebi :)

Como as leis que determinam o movimento delas são iguais, crias uma função onde explixites o movimento delas, geres a posição inicial etc...Mas vou pensar melhor no assunto
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa

Re: Colisão de esferas

Mensagempor Bruno Oliveira em Domingo Jan 22, 2012 8:15 pm

A cada objecto pertencente à classe ball, podes associar um conjunto de métodos como os que aqui descreveste: velocidade, posição, etc, mas para repetir isso para N bolas, seria um pouco (muito) mais complexo, visto que terias de detectar múltiplas colisões, tanto entre bolas como com as paredes, o que torna a programação algo mais complexo de se fazer... :roll:

Já vi que tens bastantes ideias interessantes, vi o teu problema das bolas de snooker, mas sugiro que não sejas tão ambicioso e olhes logo para a "big picture", tipo querer simular tudo com muitos detalhes, e muito realismo... Não digo que não seja algo de útil para ser feito. Mas numa primeira fase, fazer várias simulações, mas mais simples, pode compensar em relação aos projectos mais ambiciosos, just my 2 cents :wink:
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Colisão de esferas

Mensagempor ruifm em Domingo Jan 22, 2012 8:20 pm

Bruno Oliveira Escreveu:A cada objecto pertencente à classe ball, podes associar um conjunto de métodos como os que aqui descreveste: velocidade, posição, etc, mas para repetir isso para N bolas, seria um pouco (muito) mais complexo, visto que terias de detectar múltiplas colisões, tanto entre bolas como com as paredes, o que torna a programação algo mais complexo de se fazer... :roll:

Já vi que tens bastantes ideias interessantes, vi o teu problema das bolas de snooker, mas sugiro que não sejas tão ambicioso e olhes logo para a "big picture", tipo querer simular tudo com muitos detalhes, e muito realismo... Não digo que não seja algo de útil para ser feito. Mas numa primeira fase, fazer várias simulações, mas mais simples, pode compensar em relação aos projectos mais ambiciosos, just my 2 cents :wink:

:lol: quantas vezes já ouvi isso dos meus professores :P. Mas pela minha experiencia, mesmo que não consiga o tal "grande objectivo", acabo por aprender muito pelo caminho :D , porque sou forçado a entender as bases.
"Everything is determined, the beginning as well as the end, by forces over which we have no control." - Albert Einstein
Avatar do utilizador
ruifm
down-Quark!
down-Quark!
 
Mensagens: 205
Registado: Segunda Jan 16, 2012 12:04 am
Localização: Lisboa - IST

Re: Colisão de esferas

Mensagempor Bruno Oliveira em Domingo Jan 22, 2012 9:00 pm

Claro que sim!! :D

Só estares no Quark! já demonstra que tens um interesse acima da média e isso é mesmo muito bom :)
Mas, aprender aos poucos também o é! :D
e^{ix}=cos x + i\,sin x
Avatar do utilizador
Bruno Oliveira
top-Quark!
top-Quark!
 
Mensagens: 1553
Registado: Quarta Nov 14, 2007 10:19 pm
Localização: Lisboa

Re: Colisão de esferas

Mensagempor Tharis em Segunda Jan 23, 2012 1:52 pm

Penso que o teu problema das colisões é que tu invertes a velocidade quando elas estão a sobrepor-se. Ora, se tu não fazes com que elas avancem dx = v * dt na nova direcção, elas (na próxima iteracção) vão continuar a sobrepor-se e tu vais alterar de novo o sentido da velocidade para o original, ad infinitum.

Existe um exemplo de vpython com a simulação de um gás. Vê como é que eles "handlam" as colisões.
Avatar do utilizador
Tharis
up-Quark!
up-Quark!
 
Mensagens: 387
Registado: Quinta Out 23, 2008 4:26 pm

Re: Colisão de esferas

Mensagempor ruifm em Segunda Jan 23, 2012 4:51 pm

Tharis Escreveu:Penso que o teu problema das colisões é que tu invertes a velocidade quando elas estão a sobrepor-se. Ora, se tu não fazes com que elas avancem dx = v * dt na nova direcção, elas (na próxima iteracção) vão continuar a sobrepor-se e tu vais alterar de novo o sentido da velocidade para o original, ad infinitum.

Existe um exemplo de vpython com a simulação de um gás. Vê como é que eles "handlam" as colisões.

xDDD já vi, não percebo mais de metade do codigo. Usam tantas variaveis. estas a dizer que para cada teste de colisão (if ... :) eu tenho de reescrever a lei das posições, para as bolas não encravarem?
"Everything is determined, the beginning as well as the end, by forces over which we have no control." - Albert Einstein
Avatar do utilizador
ruifm
down-Quark!
down-Quark!
 
Mensagens: 205
Registado: Segunda Jan 16, 2012 12:04 am
Localização: Lisboa - IST

Re: Colisão de esferas

Mensagempor Tharis em Segunda Jan 23, 2012 6:51 pm

Tu o que tens de fazer é ver qual a distância de intersecção (a variável d do teu código) e fazer com que as bolas deixem de se tocar. Tens duas maneiras de fazer. Fazes o if tal como tens e depois afastas uma bola uma distância d da outra. Ou então, o que fazes é modificar o if de (ball.x - ball2.x) para (ball.x + ball.vx*dt - ball.x - ball.vx*dt), que assim verifica se na próxima iteracção elas vão colidir e assim podes fazer já a colisão.

Já agora, convém teres várias ball.vx, ball.vy, ball.vz porque tu só podes fazer vel = -vel se as velocidades das duas bolas estiverem na mesma direcção. Caso contrário terás de resolver as equações de uma colisão elástica para X, Y e Z.

Em relação a esse ficheiro, havia um mais simples, vou ver se encontro. No que te dei, o código que interessa começa aqui:

######################
## atom-to-atom collisions
## find time of next impending atom-to-atom collision
## without regard to the walls
Avatar do utilizador
Tharis
up-Quark!
up-Quark!
 
Mensagens: 387
Registado: Quinta Out 23, 2008 4:26 pm

Re: Colisão de esferas

Mensagempor filipematos em Terça Jan 24, 2012 12:10 pm

Ele diz que se baiseia num exemplo que já vem com o Vpython, tenta analisá-lo, eu agora não tenho aqui o Vpython, mas procura lá nos exemplos :)
"If I have seen further than others, it is by standing upon the shoulders of giants" - Isaac Newton

“We build too many walls and not enough bridges.” - Isaac Newton
filipematos
down-Quark!
down-Quark!
 
Mensagens: 280
Registado: Sábado Jun 25, 2011 4:48 pm
Localização: Lisboa


Voltar para Pitónica

Quem está ligado

Utilizadores a navegar neste fórum: Nenhum utilizador registado e 1 visitante

cron