terça-feira, 16 de junho de 2009

Transformações

Transformações

O POV-RAY permite aplicar transformações a cada objecto. As transformações básicas são:

  • translate : aplica uma translação
  • scale : aplica uma escala
  • rotate : aplica uma rotação

Estas transformações são aplicadas como um atributo do nó que descreve um objecto. Por exemplo, o seguinte código aplica uma escala a um objecto do tipo Box:

box {<0,0,0>,<1,1,1> scale <1,2,.5>}

A translação

Para aplicar uma translação basta utilizar o campo translate com um vector que quantifica o deslocamento associado à translação. Por exemplo, uma translação de uma esfera de 5 unidades em x, 1 em y e -8 em z será feita da seguinte forma:

sphere {... translate <5,1,-8>}

A escala

Para aplicar uma escala de forma a reduzir ou ampliar um objecto é preciso utilizar o campo scale seguido de um vector que define o coeficiente de escala a aplicar para cada dimensão (x, y , z). Se estes valores forem iguais, a escala será uniforme. Caso contrário, em que pelo menos um valor é diferente dos outros, a escala aplicada é não uniforme.

A escala efectua-se sempre relativamente ao eixos (e origem) independentemente da geometria do objecto transformado. Não podem ser utilizados valores nulos num dos eixos. Para duplicar o comprimento de um objecto em Z basta efectuar:

scale <1,1,2>

No caso de existirem valores nulos, o sistema avisa o utilizador e converte-os automaticamente para 1.

A rotação

A rotação permite aplicar uma rotação em torno dos três eixos do espaço. A rotação é especificada em graus. O campo rotate define o valor angular da rotação para cada um dos eixos na forma de um único vector com três ângulos. Como foi referido anteriormente, é aplicada a regra da mão esquerda para definir o sentido positivo da rotação.

A rotação, quando usada com um vector, é aplicada sempre pela mesma ordem: 1° x, 2° y e 3° z. No código seguinte é aplicada uma rotação de 20° em torno do eixo dos xx e depois outra de -55° em torno do eixo dos yy:

object{...
texture{.... rotate<20,-55,0>}
}

Ao contrário da escala, a transformação de rotação é sempre relativa aos eixos do espaço, independentemente da geometria do objecto.

Transformação de Rotação

A rotação define a orientação do modelo no universo.

A fórmula de rotação de um ponto (xo,yo) de um ângulo de 'ang' é dada por:

xu := xo * cos (ang) - yo * sin (ang)
yu := yo * cos (ang) + xo * sin (ang)

Nesta fórmula deve-se dar especial atenção ao fato de que a maioria das linguagens possuem funções trigonométricas operando em radianos.

Da mesma forma que ocorre com a transformação de escala a rotação também se processa em torno da origem. Assim sendo, é importante considerar isto na criação do modelo para evitar translações indesejáveis.



Ordem das transformações

Podem ser aplicadas a um único objecto tantas transformações quantas se quiser, pela ordem desejada. Mas é preciso ter cuidado com a ordem de escrita das transformações, visto existir uma diferença entre:

box {<0,0,0>,<1,1,1> translate <0,2,15> rotate <30,10,0>} // translação seguida de rotação

e

box {<0,0,0>,<1,1,1> rotate <30,10,0> translate <0,2,15>} // rotação seguida de translação

Em geral, é aconselhável efectuar as operações na seguinte ordem: scale, rotate, translate.

Transformações das texturas

Como foi mostrado no exemplo da rotação, é possível aplicar transformações a texturas. Por esse motivo, a sequência das transformações é importante no caso de aplicar transformações a objectos com texturas. Por exemplo:

box {... translate <10,15,8> texture {xpto}} // a caixa utiliza a textura na posição da caixa depois da translação

enquanto que

box {... texture {Bois_Sapin} translate <10,15,8>} // a caixa utiliza a textura na sua posição inicial e esta segue-a quando a caixa é transladada

Normalmente é aconselhável por sempre as transformações no final do objecto.

Composição de Transformações

Uma importante questão que sempre deve ser considerada com relação as transformações afins se refere a sua composição. Neste caso, a ordem em que elas são executadas pode alterar o resultado final esperado.

Considerem-se então duas transformações afins, uma somente de rotação de 45° em torno do eixo z e outra somente de translação de valor Dx ao longo do eixo x. Como a rotação é realizada em relação a origem do sistema de coordenadas.

Veja a figura 2.11.a, a aplicação primeira da rotação e depois da Translação resulta na figura 2.11.b e o inverso na figura 2.11.c.





Neste sentido, caso se deseje rotacionar um objeto no espaço em torno de um ponto interno a ele, deve se primeiramente deslocar o centro de rotação (origem dos eixos) para este ponto, proceder a rotação e posteriormente voltar o centro de rotação a sua posição inicial (fig. 2.12). Note-se que isto equivale a deslocar o objeto para o centro de coordenadas.

Exemplos de Transformações 2D

Translação

Escala

uniforme

não uniforme

Rebatimento por um eixo (espelhamento)

Troca de eixos

Rotação pela origem

Outras transformações

E possível definir uma transformação e atribui-lhe um nome:

#declare Mouvement1 = transform {translate x*15 rotate y*90};
 
object {...
 
        transform {Mouvement1}
 
        }

No ficheiro "transforms.inc" estão definidas uma série de transformações que podem ser utilizadas. Tais como:

Shear_Trans(A,B,C) : reorienta e distorce um objecto de forma que x, y e z apontem para A, B ,C

Matrix_Trans(A,B,C,D) : permite definir uma matriz de transformação usando 4 vectores.

Axial_Scale_Trans(Axis, Amt) : escala direccional ao longo de um eixo.

Utiliza-se também matrizes para definir transformações. Por exemplo:


Matriz nas Transformações

Todas as transformações podem ser efetuadas através da multiplicação de matrizes (usando coordenadas homogêneas).

As transformações podem ser aninhadas e resolvidas de modo a haver apenas uma matriz de multiplicação a ser aplicada.

A característica descrita acima se torna muito importante quando a mesma seqüência de transformações deve ser aplicada para diversos pontos.

Exemplo de Multiplicação de Matrizes


Onde:

Com objetivo de permitir que quaisquer das três transformações sejam realizadas com multiplicações e, com isto, tornar possível a combinação de todas elas numa única matriz foi criado o conceito de coordenadas homogêneas.

Com o uso desta técnica a configuração das matrizes apresentadas acima fica da seguinte forma:




Já as fórmulas para a realização das transformações tornam-se todas multiplicações:

Translação : MC * MT

Escala : MC * ME

Rotação : MC * MR

A matriz linha resultante das operações terá sempre 3 colunas, onde a 3ª deve ser ignorada.

Para criar uma matriz única, que represente mais de uma transformação basta multiplicar as matrizes correspondentes a estas operações.

Coordenadas homogêneas em espaço projetivo

• Representamos apenas pontos (não vetores)

• Em 2D, um ponto (x,y) será representado em c.h. pela matriz coluna

[x. w y. w w]T, para w¹0

Assim, o ponto (4,3) pode ser representado por

[8 6 2] T, [12 9 3] T, [-4 -3 -1] T, etc.

01-03-2007 6

• Dado um ponto com coordenadas homogêneas

[x y w]T, a sua representação canônica e dada por [x/w y/w 1]T

Designamos essa operação por divisão perspectiva

• Considere os pontos da reta x=y: (1,1), (2,2), etc.

Podemos representá-los em c.h. por [1 1 1]T, [1 1 .]T, etc.

Claramente, o ponto ideal dessa reta e dado por [1 1 0]T

Coordenadas Homogéneas

Nos computadores os objetos geométricos não são conceitos primitivos. Um ponto ou uma reta tem de ser representada por números: as coordenadas. Usualmente, um ponto do plano é representado pelas suas coordenadas (x,y). Uma reta pode ser definida pelos três parâmetros (a,b,c) da sua equação ax + by + c = 0. Contudo, este processo revela-se pouco prático quando queremos fazer Geometria Projetiva. Cada par (x,y) representa um ponto finito, mas não há representação semelhante para pontos no infinito. A solução correta para este problema tornou-se gradualmente clara na primeira metade do século XIX. Começou com as coordenadas baricentricas de Möbius, continuou com o sistema de coordenadas homogêneas de Plücker, e finalizou com a criação da Álgebra Multilinear por Grassmann.

A via a seguir para evitar o dilema é a seguinte. Para cada ponto usamos três coordenadas, em vez de duas, introduzindo uma dimensão. Considere a seguinte situação: O plano é mergulhado numa posição paralela ao plano horizontal (x,y) do espaço tridimensional, a uma altura de z=1, não contendo portanto a origem.

Mergulhando o plano no espaço

Cada ponto (x,y) é representado pelas suas três coordenadas (x,y,1). Estas são as coordenadas homogêneas do ponto. O que acontece aos outros pontos do espaço? Quase todos serão interpretados com pontos do plano original: identificamos todos os pontos cujas coordenadas difiram por uma constante multiplicativa não nula. Por exemplo, (4,6,2) e (2,3,1) descrevem o mesmo ponto. Em geral um ponto de coordenadas (x,y,z) será identificado com (x/z,y/z,1) do plano original. Este processo é chamado dês-homogeneização. É como se a cada ponto do plano original estivesse associada a reta pela origem do espaço que o contém.

Contudo, há pontos no espaço que não correspondem a nenhum ponto do plano original. Os pontos da forma (x,y,0) não podem ser tratados da forma descrita, porque não podemos dividir por zero. Estes pontos correspondem precisamente aos pontos no infinito da geometria projetiva. Para compreender isto vamos estudar o comportamento de um ponto que se afaste para infinito no plano original.

Suponha que o ponto em questão tem coordenadas (r,r). Quando r cresce indefinidamente o ponto aproxima-se de um ponto no infinito na direção de 45°. As respectivas coordenadas homogêneas são (r,r,1)~(1,1,1/r). Quando r cresce a contribuição das duas primeiras coordenadas dominam a da terceira. No limite, quando r "é infinito", as coordenadas homogêneas são dadas por (1,1,0), um ponto infinito. Também pode considerar a reta definida por este ponto e pela origem do espaço. Quando o ponto se afasta esta reta torna-se cada vez mais horizontal, até que, no limite, está contida no plano x,y.

Uma representação semelhante pode ser dada para retas. Para a reta ax + by + c = 0 tomamos os parâmetros (a,b,c) como coordenadas homogêneas da reta. Como no caso dos pontos, identificamos múltiplos não nulos das coordenadas, visto que multiplicar por constante não nula não altera o conjunto solução da equação. Há umas coordenadas que não correspondem a nenhuma reta finita, (0,0,1). Esta é a reta no infinito. O vetor (a,b,c) é ortogonal ao plano que contém a reta com essas coordenadas e a origem. Em particular o vetor (0,0,1) é ortogonal ao plano (x,y).

Na realidade, a noção algébrica de coordenadas homogêneas fornece uma simetria perfeita entre retas e pontos. Cada ponto e cada reta é representado por três coordenadas homogêneas. Um ponto (x,y,z) pertence à reta (a,b,c) se e só se o produto escalar ax + by + cz é zero – isto é exatamente o mesmo que escrever a equação da reta. Geometricamente isto significa que os vetores correspondentes são ortogonais no espaço

SISTEMA DE USUÁRIO

É descrito aqui um sistema de usuário incluindo um equipamento de terminal (TE) configurado para receber e enviar dados através de uma rede de comunicação (CN); sistema de suporte de segurança de terminal (TSSS) inserível de forma removível e configurado para cooperar com o equipamento de terminal (TE); e plataforma de usuário confiável (TUP) para o equipamento de terminal (TE). A (TUP) inclui um sistema de proteção de informação (IPS) configurado para implementar funcionalidades de segurança, instâncias de configuração (CI) para o sistema de proteção de informação (IPS), e um agente de comunicação confiável (TCA) configurado para prover uma comunicação segura entre o sistema de suporte de segurança de terminal (TSSS) e um cento de gerenciamento remoto (RMC), através do equipamento de terminal (TE), de modo a permitir que o sistema de proteção de informação (IPS) seja remotamente configurado a partir do centro de gerenciamento remoto (RMC). O sistema de suporte de segurança de terminal (TSSS) inclui um cartão de circuito integrado (ICC) e/ou um cartão de memória (MC) que suporta totalmente a plataforma de usuário confiável (TUP) e o equipamento de terminal (TE) é configurado para enviar dados a serem submetidos a controle de segurança e receber dados controlados por segurança a partir da plataforma de usuário confiável (TUP).