590 likes | 746 Views
Modelagem Baseada na Física Simulação de Corpos Rígidos. César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE. Objetivo. Apresentar os principais conceitos das notas de aula elaboradas por David Baraff no Modelamento Baseado na Física para simulação de movimentos de Corpos Rígidos.
E N D
Modelagem Baseada na FísicaSimulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE
Objetivo Apresentar os principais conceitos das notas de aula elaboradas por David Baraff no Modelamento Baseado na Física para simulação de movimentos de Corpos Rígidos.
Roteiro • Modelando o Movimento de uma Partícula • Modelando o Movimento um Corpo Rígido • Velocidade Angular • Massa de um Corpo • Centro de Massa • Força e Torque • Momento Linear • Momento Angular • Momento Inércia • Equação Movimento de um Corpo Rígido • Codificação em C++ • Conclusão • Bibliografia
Modelando o Movimento de uma Partícula Movimento de uma Partícula
Solução EDO Y(t0) len t0 Solucionador Y(t1) EDO t1 dydt void dydt(double t, double y[ ],double ydot[ ])
Modelando um Corpo Rígido • Variáveis de Estado do Corpo Rígido
Orientação • Iremos representar a orientação de um corpo rígido pela matriz de rotação R(t). Os pontos são transformados de coordenadas do corpo para coordenadas do espaço como: P(t)=R(t)p0 + x(t)
Mudança de Coordenadas Coordenadas Espaço Corpo Coordenadas Espaço
Velocidade Angular • Representamos a velocidade angular como um vetor, w(t), o qual codifica tanto a velocidade quanto o eixo de giro. • Como w(t) e R(t) se relacionam ?
Interpretação Física da Matriz R(t) • Sabemos que: • Quem seria:
Relação entre w(t) e R(t) • r(t) é fixo ao corpo, logo independe da translação do corpo;
Relação entre w(t) e R(t) • Sabemos que no tempo t a direção do eixo x é dado pela primeira coluna da matriz de rotação. • A derivadadesta, é a taxa de mudança deste vetor que é: • Sabemos entretanto que a b é:
Relação entre w(t) e R(t) • Dado um vetor a podemos definir a* como sendo a matriz: • Então a b pode ser escrito:
Relação entre w(t) e R(t) • Utilizando a formulação anterior temos que: • Pode ser escrito como: • Como a matriz à direita é R(t) podemos escrever:
Massa de um Corpo • Consideremos um corpo rígido feito de um número grande de pequenas partículas, cada uma localizada: • A massa total M do corpo será
Velocidade de uma Partícula • A velocidade é dada pela derivada da posição da partícula, ou seja: • Podemos reescrever como:
Centro de Massa • É definido como • Quando utilizamos o centro de massa como sistema de coordenadas do corpo, queremos dizer que:
Centro de Massa • Qual a localização do centro de massa em t ? • Outra relação importante:
Força e Torque • Torque difere da força uma vez que o torque em uma partícula depende da localização relativa da mesma em relação ao centro de massa x(t). • Intuitivamente a direção do torque é o do eixo em torno do qual o corpo gira. • F(t) não traz informações sobre onde as várias forças agem em um corpo, ao contrário de τ(t), que nos dá a distribuição de forças sobre o corpo.
Momento Linear • O Momento Linear de uma partícula é definido como sendo: • O momento total P(t) é: • Podemos escrevê-lo como:
Momento Linear • O momento linear de um corpo rígido é o mesmo se ele fosse uma partícula de massa M e velocidade v(t). • Obtemos diretamente:
Momento Angular • É o menos intuitivo dos conceitos vistos até aqui... • Proporcionará equações mais simples... • O momento angular é definido como:
Momento Angular • Sabemos que: . • Multiplicando vetorialmente por r : • ou seja, • Sabemos que: , o qual podemos escrever como:
Momento Angular • O momento angular total de um corpo rígido será: • E o torque total será: • Que é o equivalente de
Tensor (Momento) de Inércia • Em um corpo rígido as partículas mantêm as mesmas posição relativas. • Consideremos um corpo rígido girando com velocidade angular em torno de um eixo. Seja K a energia cinética deste corpo.
Relação entre o Tensor de Inércia e a Velocidade Angular • Podemos demonstrar que: • Que é a forma similar de • O momento de inércia I(t) é o fator de escala entre o momento angular L(t) e a velocidade angular w(t).
Momento de Inércia • Seja ri’ o deslocamento da i-ésima partícula em relação a x(t) no tempo t, ou seja: • O momento de inércia I(t) é expresso em termos de ri’ como a seguinte matriz simétrica:
Momento de Inércia • Usando o fato de que podemos reescrever I(t) como a diferença : • Tomando o produto:
Momento de Inércia • Seja 1a matriz unitária 33, podemos expressar I(t) como: • Sabemos que onde é constante. Daí e podemos escrever I(t) como:
Equações do Movimento do Corpo Rígido • Temos finalmente todos os conceitos que especificam o vetor de estados Y(t)
Codificação Básica em C++ • Assumamos a existência de tipos denominados de matrix e triple, as quais implementam operações (soma, subtração e multiplicação) respectivamente, sobre matrizes 33 e pontos em 3-d.
Estrutura de um Corpo Rígido struct RigidBody { /* Constant quantities */ double mass; /* mass M */ matrix Ibody, /* Ibody */ Ibodyinv; /* I-1body (inverse of Ibody) */ /* State variables */ triple x; /* x(t) */ matrix R; /* R(t) */ triple P, /* P(t) */ L; /* L(t) */ /* Derived quantities (auxiliary variables) */ matrix Iinv; /* I-1(t) */ triple v, /* v(t)*/ omega; /* w(t) */ /* Computed quantities */ triple force, /* F(t)*/ torque; /* τ(t) */ }; /* and assume a global array of bodies */ RigidBody Bodies[NBODIES];
Estrutura de um Corpo Rígido • As quantidades mass, Ibody e Ibodyinv devem ser previamente calculadas para cada membro do conjunto de “Bodies”. • Todas as condições iniciais para cada corpo rígido também são especificadas pela atribuição valores às variáveis de estado x, R, P e L de cada membro de “Bodies”.
Passando parâmetros ao solucionador de EDO /* Copy the state information into an array */ void State_to_Array(RigidBody *rb, double *y) { *y++ = rb->x[0]; /* x component of position */ *y++ = rb->x[1]; /* etc. */ *y++ = rb->x[2]; for(int i = 0; i < 3; i++) /* copy rotation matrix */ for(int j = 0; j < 3; j++) *y++ = rb->R[i,j]; *y++ = rb->P[0]; *y++ = rb->P[1]; *y++ = rb->P[2]; *y++ = rb->L[0]; *y++ = rb->L[1]; *y++ = rb->L[2]; }