A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE.

Apresentações semelhantes


Apresentação em tema: "1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE."— Transcrição da apresentação:

1 1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE

2 2 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.

3 3 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

4 4 Modelando o Movimento de uma Partícula Movimento de uma Partícula

5 5 Estado da Partícula

6 6 Dinâmica da Partícula

7 7 Variáveis de Estado

8 8 Múltiplas Partículas

9 9 Variáveis de Estado

10 10 Solução EDO

11 11 Solução EDO Y ( t 0 ) len t 0 Solucionador Y ( t 1 ) EDO t 1 dydt void dydt(double t, double y[ ],double ydot[ ])

12 12 dydt

13 13 Modelando um Corpo Rígido Variáveis de Estado do Corpo Rígido

14 14 Equação Movimento de um Corpo Rígido

15 15 Malha de Forças

16 16 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)p 0 + x(t)

17 17 Mudança de Coordenadas Coordenadas Espaço CorpoCoordenadas Espaço

18 18 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 ?

19 19 Interpretação Física da Matriz R(t) Sabemos que: Quem seria:

20 20 Relação entre w(t) e R(t) r(t) é fixo ao corpo, logo independe da translação do corpo;

21 21 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 derivada desta, é a taxa de mudança deste vetor que é: Sabemos entretanto que a b é:

22 22 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:

23 23 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:

24 24 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á

25 25 Velocidade de uma Partícula A velocidade é dada pela derivada da posição da partícula, ou seja: Podemos reescrever como:

26 26 Velocidade de uma Partícula

27 27 Centro de Massa É definido como Quando utilizamos o centro de massa como sistema de coordenadas do corpo, queremos dizer que:

28 28 Centro de Massa Qual a localização do centro de massa em t ? Outra relação importante:

29 29 Equação do Movimento Corpo Rígido

30 30 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.

31 31 Força e Torque

32 32 Força e Torque

33 33 Momento Linear O Momento Linear de uma partícula é definido como sendo: O momento total P(t) é: Podemos escrevê-lo como: –

34 34 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: – – –

35 35 Momento Angular É o menos intuitivo dos conceitos vistos até aqui... Proporcionará equações mais simples... O momento angular é definido como:

36 36 Momento Angular

37 37 Momento Angular Sabemos que:. Multiplicando vetorialmente por r : – ou seja, Sabemos que:, o qual podemos escrever como: –

38 38 Momento Angular O momento angular total de um corpo rígido será: E o torque total será: Que é o equivalente de

39 39 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.

40 40 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).

41 41 Momento de Inércia Seja r i 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 r i como a seguinte matriz simétrica:

42 42 Momento de Inércia Usando o fato de que podemos reescrever I(t) como a diferença : Tomando o produto:

43 43 Momento de Inércia Seja 1 a matriz unitária 3 3, podemos expressar I(t) como: Sabemos que onde é constante. Daí e podemos escrever I(t) como:

44 44 Momento de Inércia

45 45 Inverso do Momento de Inércia

46 46 Equações do Movimento do Corpo Rígido Temos finalmente todos os conceitos que especificam o vetor de estados Y(t)

47 47 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 3 3 e pontos em 3-d.

48 48 Estrutura de um Corpo Rígido struct RigidBody { /* Constant quantities */ double mass; /* mass M */ matrix Ibody, /* Ibody */ Ibodyinv; /* I -1 body (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];

49 49 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.

50 50 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]; }

51 51 Recebendo parâmetros do solucionador de EDO /* Copy information from an array into the state variables */ void Array_to_State(RigidBody *rb, double *y) {rb->x[0] = *y++;rb->x[1] = *y++;rb->x[2] = *y++; for(int i = 0; i < 3; i++) for(int j = 0; j < 3; j++) 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] = *y++; /* Compute auxiliary variables... */ /* v(t)=P(t)/M */ rb->v = rb->P / mass; /* I -1 (t)=R(t) I -1 body R(t) T */ rb->Iinv = R * Ibodyinv * Transpose(R); /* w(t)=I -1 (t)L(t) */ rb->omega = rb->Iinv * rb->L; }

52 52 Passando e recebendo o estado de todos os corpos #define STATE_SIZE 18 void Array_to_Bodies(double y[]) { for(int i = 0; i < NBODIES; i++) Array_to_State(&Bodies[i], &y[i * STATE_SIZE]); } void Bodies_to_Array(double y[]) { for(int i = 0; i < NBODIES; i++) State_to_Array(&Bodies[i], &y[i * STATE_SIZE]); }

53 53 Computando dydt Suporemos que exista a função que calcula a força F(t) e o Torque τ(t) agindo sobre cada corpo: void Compute_Force_and_Torque(double t, RigidBody *rb); Assim dydt será: void dydt(double t, double y[], double ydot[]) { /* put data in y[] into Bodies[] */ Array_to_Bodies(y); for(int i = 0; i < NBODIES; i++) { Compute_Force_and_Torque(t, &Bodies[i]); ddt_State_to_Array(&Bodies[i],&ydot[i * STATE_SIZE]); m} }

54 54 Função que Atualiza a Estrutura de dY(t)/dt do Corpo Rígido void ddt_State_to_Array(RigidBody *rb, double *ydot) { /* copy dx/dt= v(t) into ydot */ *ydot++ = rb->v[0];*ydot++ = rb->v[1];*ydot++ = rb->v[2]; /* Compute d R/dt=w(t)* R(t) */ matrix Rdot = Star(rb->omega) * rb->R; /* copy d R/dt into array */ for(int i = 0; i < 3; i++) for(int j = 0; j < 3; j++) *ydot++ = Rdot[i,j]; /* dP/dt=F(t) */ *ydot++ = rb->force[0]; *ydot++ = rb->force[1]; *ydot++ = rb->force[2]; /* dL/dt=τ(t) */ *ydot++ = rb->torque[0]; *ydot++ = rb->torque[1]; *ydot++ = rb->torque[2]; }

55 55 Rotina Star A rotina Star utilizada é definida como: matrix Star(triple a); e retorna a seguinte matrix:

56 56 Executando a Simulação void RunSimulation() { double y0[STATE_SIZE * NBODIES], yfinal[STATE_SIZE * NBODIES]; InitStates(); Bodies_to_Array(yfinal); for(double t = 0; t < 10.0; t += 1./30.) {/* copy yfinal back to y0 */ for(int i = 0; i < STATE_SIZE * NBODIES; i++) y0[i] = yfinal[i]; ode(y0, yfinal, STATE_SIZE * NBODIES,t, t+1./30., dydt); /* copy d Y(t+1/30.)/ t into state variables */ Array_to_Bodies(yfinal); DisplayBodies(); }

57 57 Quaternions x Matrix de Rotações A matriz de quaternions é um tipo que comporta apenas 4 elementos; Evita-se o uso da matriz de rotação devido a maior propagação de erros numéricos (drift); Visualmente percebe-se um efeito de deslizamento; e Enquanto a matriz de rotação faz uso de nove parâmetros para descrever três graus de liberdade, os quaternions utilizam quatro parâmetros com um único descrevendo os três graus de liberdade menos drift que as matrizes de rotação.

58 58 Conclusão Foi apresentado, passo a passo, todo o background utilizado na Modelagem Baseada na Física para implementação de movimentos de corpos rígidos, assim como uma pequena codificação em C++ que pode ser utilizada como um first step no desenvolvimento do aplicativo.

59 59 Bibliografia An Introduction to Physically Based Modeling: Rigid Body Simulation I – Unconstrained Rigid Body Dynamics ; David Baraff (Notas do Curso Siggraph 94/97); Física Vol.1; R. Resnick e D. Halliday Physically-Based Modeling for Computer Graphics; Ronen Barzel


Carregar ppt "1 Modelagem Baseada na Física Simulação de Corpos Rígidos César Candido Xavier Mestrado Computação Gráfica UFRJ - COPPE."

Apresentações semelhantes


Anúncios Google