Rotações (muito bom)

Rotações (muito bom)

(Parte 1 de 2)

3.6Descrição de Rotações no Plano
3.6.1Matriz de Rotação

3.6- 1

Às vezes temos que descrever a posição de uma partícula num referencial plano que é girado de um ângulo φ com respeito a outro sistema fixo.

Na álgebra linear aprendemos que uma rotação pode ser descrita por uma transformação linear: r' = R·r. O nosso primeiro objetivo é determinar os elementos da matriz do operador de rotação R.

No sistema de coordenadas fixo C(O,i,j), o ponto P tem as coordenadas (x,y). No sistema C'(O,i',j') as coordenadas do mesmo ponto são (x',y'). O sistema C', girado de um ângulo φ, tem a mesma origem que C. φ indica o βngulo que o semi-eixo positivo x' forma com o semi-eixo positivo x.

Fig. 3.6-1

A representação matricial de R encontramos por meio dos produtos escalares dos vetores unitários:

i·i' = cos φ, j·j' = cos φ, i·j' = cos(φ+π/2) = - sen φ, j·i' = cos(π/2-φ) = sen φ

3.6- 2

Agora, r = x·i + y·j = x'·i' + y'·j'. Multiplicando r por i' e j', obtemos x' = i'·r e y' = j'·r e substituindo r por x·i + y·j, teremos x' = i' ·( x i + y·j) = x·i'·i + y·i'·j = x·cos φ + y·sen φ e y' = j' ·r = j'·( x i + y·j) = x·(-sen φ) + y·cos φ. Temos, entγo :

x' = x·cos φ + y·sen φ
y' = x·(-sen φ) + y·cos φ(1)

Este resultado podemos escrever em forma matricial:

(2) A matriz de rotação R tem, então, a forma:

Analogamente podemos calcular (x,y) em função dos (x',y'): Multiplicando r por i e j e substituindo r por x'·i' + y'·j', temos

x = x'·cosφ + y'·(-senφ) e y = x'·senφ + y'·cosφ(4)

Outra maneira para chegar as relações (4), seria a solução das equações (1) com respeito a x e y. É possível fazer isso a mão, o, se isso for difícil de mais, com ajuda de MuPAD:

Programa 1:

sol:=linsolve({x1=x*cos(f)+y*sin(f),y1=-x*sin(f)+y*cos(f)}, {x,y}): simplify(%)

3.6- 3

Também pode-se usar a matriz inversa na equação r = R-1·r': Programa 2:

• reset(): mat:=Dom::Matrix():export(linalg): R:=mat([[cos(fi),sin(fi)],[-sin(fi),cos(fi)]]): r1:=mat([x1,y1]): r:=R^(-1)*r1: x:=simplify(r[1]); y:=simplify(r[2]); x1 cos(fi) - y1 sin(fi) y1 cos(fi) + x1 sin(fi)

3.6.2 Aplicações

eixo. Mas r cosα = x e r senα = yEntão : x' = x cosφ - y senφ.

Nas aplicações queremos muitas vezes girar o ponto P e manter o sistema de coordenadas fixo. Em tal caso temos x' = r cos(α+φ) = r cos α cos φ - r sen α sen φ, sendo α o βngulo que o vetor r faz com o eixo-x. O vetor r' faz o ângulo α + φ com este

Analogamente: y' = r sen(α +φ) = y cos φ + x sen φ. A matriz de rotaηão de um ponto P de um ângulo φ -no sentido anti-horário- é, então,

(A rotação anti-horária de um vetor-posição corresponde a uma rotação do sistema de coordenadas no sentido horário. RP é a matriz inversa da (2) e é obtida, neste caso, substituindo φ por -φ.)

Com o Programa 3 podemos ilustrar a rotação do ponto (x,y) de um ângulo φ, no caso 35o anti-horário, -note também a aplicação de ViewingBox:

3.6- 4

Programa 3:

• reset()://rotação de um ponto ou uma seta em torno de (0,0) fi:=35*PI/180: x:=3:y:=5: mat:=Dom::Matrix():export(linalg): R:=mat([[cos(fi),-sin(fi)],[sin(fi),cos(fi)]]): r:=mat([x,y]): r1:=R*r://equação da transformação x1:=float(r1[1]); y1:=float(r1[2]); ar:=plot::Arrow2d([0,0],[x,y],Color=RGB::Blue): ar1:=plot::Arrow2d([0,0],[x1,y1],Color=RGB::Red): plot(ar,ar1,ViewingBox=[-6..6,0..8],Scaling=Constrained)

Fig. 3.6-2

3.6- 5

MuPAD tem a função Transform2d que simplifica um pouco o programa 3 e que é bastante útil quando se quer transformar varios objetos, utilizando a função plot::Scene2d. No próximo programa 4 fazemos uso de Transform2d.

Desafortunadamente, não é possível usar a função Color=RGB junto com a instrução Transform2d, o que tem por consequência que o objeto transformado é representado da mesma cor que o original, no caso, vermelho.

Programa 4:

• reset(): fi:=35*PI/180: x:=3:y:=5: R := matrix([[cos(fi), -sin(fi)], [sin(fi), cos(fi)]]): ar := plot::Arrow2d([0, 0], [x, y], Color = RGB::Red): ar1:= plot::Transform2d(R,ar): plot(ar,ar1,Scaling = Constrained, Layout = Vertical);

Fig. 3.6-3

3.6- 6

Com a instrução ar1::Matrix2d(R) podemos ver a forma da matriz R assim como com a:=float(R).Mas, a forma do resultado produzido por float(R) é muito mais intuitivo. Isso é fortemente ilustrado no caso dos 30 grados, sem uso de float .

• a:=float(R); a1:=ar1::Matrix2d(R)

• a:=R; a1:=ar1::Matrix2d(R)

Se o vetor r começa no ponto P0 = (x0,y0) e termina em P = (x,y), temos uma rotação do vetor P0P em torno do ponto P0. A transformação se escreve, neste caso, como r' = R(r - ro) + ro , pois é o vetor r - ro o que gira ao redor de P0. O programa 5 mostra este caso.

Programa 5:

• reset()://rotação de uma seta ao redor de p0 fi:=35*PI/180: x:=3:y:=5:

3.6- 7 x0:=-2:y0:=2: mat:=Dom::Matrix():export(linalg): R:=mat([[cos(fi),-sin(fi)],[sin(fi),cos(fi)]]): r:=mat([x,y]): r0:=mat([x0,y0]): r1:=R*(r-r0)+r0: x1:=float(r1[1]); y1:=float(r1[2]); ar:=plot::Arrow2d([x0,y0],[x,y],Color=RGB::Blue): ar1:=plot::Arrow2d([x0,y0],[x1,y1],Color=RGB::Red): plot(ar,ar1,ViewingBox=[-6..6,0..8],Scaling=Constrained)

Fig. 3.6-4

3.6- 8

No seguinte Programa 6 fazemos uso da função plot::Scene2d, para representar a transformação de três vetores.

Com Layout = Vertical obtemos os resultados da transformação verticalmente debaixo do gráfico dos vetores originais.

Programa 6:

• reset(): fi:=35*PI/180: R := matrix([[cos(fi), -sin(fi)], [sin(fi), cos(fi)]]): x1 := plot::Arrow2d([0, 0], [3, 5], Color = RGB::Red): x2 := plot::Arrow2d([0, 0], [-3, 1], Color = RGB::Green): x3 := plot::Arrow2d([0, 0], [2, -5], Color = RGB::Blue): plot(plot::Scene2d(x1, x2, x3), plot::Scene2d(plot::Transform2d(R,x1,x2,x3), Scaling = Constrained, Layout = Vertical));

Fig. 3.6-5

3.6- 9

No último programa vemos a rotação de um polígono por meio da função plot::Polygon2d. Sem esta função, deveriamos colocar pontos no gráfico e conectá-los por meio de linhas. Informação sobre este procedimento, e também sobre transformações em geral, pode-s obter no site:

(Parte 1 de 2)

Comentários