Next: Objeto camera, Previous: transform objects, Up: Objetos nao-geometricos

#### 4.3.4 Objetos ND-Transform

Onde – no contexto de visualização NDimensional – uma matriz simples (N+1)x(N+1) é esperada – como no campo `INST` `ntransform`, ou a `ND-xform*` (veja comandos GCL) – use um objeto `ntransform`.

`ntransform` são matrizes de transformação NLinhas x NColunas onde usualmente NLinhas = N+1 no contexto de objetos N-dimensionais e visualização. A componente homogênea de uma `ntransform` situa-se na coluna zero (em oposição a objetos `transform` comuns onde a componente homogênea situa-se na coluna três). Objetos `ntransform` trabalham sobre pontos de qualquer dimensão: se um ponto é para ser transformado através de um objeto `ntransform` e a dimensão do ponto não coincide com o número de linhas do objeto `ntransform`, então ou o ponto está implicitamente preenchido com zeros para coincidir com NLinhas ou a matriz está implicitamente preenchida com unidades abaixo de sua diagonal principal (e zeros em todas as outras posições) de forma que a matriz irá trabalhar como a matriz identidade sobre as dimensões excedentes do ponto de entrada.

A sintaxe para um objeto `ntransform` é

         <ntransform> ::=
           [ "{" ]             (abertura de chave, geralmente necessária para
                                tornar o fim do objeto claramente explicitado.)

            [ "ntransform" ]    (palavra chave opcional; desnecessária se o tipo
                                for determinado pelo contexto, o que
                                comumente ocorre.)

            [ "define" <nome> ]
                                (define uma transformação chamada <nome>,
                                escolhendo seus valores do material adiante)

              NLinhas NColunas
                                (número de linhas e colunas da matriz,
                                tipicamente N+1 N+1, mas qualquer dimensão
                                é possível)
              <NLinhas x NColunas números em ponto flutuante>
                                (interpretados como uma transformação homogênea
                                NLinhas x NColunas fornecida linha por linha,
                                pretensamente a ser aplicada a um vetor linha
                                multiplicado à ESQUERDA, de forma que e.g.
                                translações Euclideanas aparecem na linha mais
                                acima -- em oposição a objetos de
                                transformação comuns onde as
                                translações aparecem na linha mais inferior)
            |
               "<" <nomedearquivo>  (significando: leia a transformação daquele
                                arquivo)
            |
               ":" <nome>      (significando: use a variável <nome>,
                               definida em algum lugar; se não for definida o
                               valor inicial é a transformação identidade)

          [ "}" ]             (correspondente fechamento de chave)

O conjunto deve ser delimitado entre { chaves }. Chaves não são necessariamente essenciais, de forma que e.g. dois inteiros – NLinhas NColunas – seguidos por um array composto de NLinhas x NColunas números em ponto flutuante independentes pode mas não precisa ter chaves.

Alguns exemplos, em contextos onde eles possivelmente podem ser usados:

         # Exemplo 1: Um comando GCL para definir uma transformação 6x6 chamada
         # "fred", uma mera translação por meio do vetor -3 0 1 1 0. Essa
         # transformação é significativa para um espaço pentadimensional, com uma componente
         # homogênea um índice zero.

         (read ntransform { ntransform  define fred
                  6 6
                  1 -3 0 1 1 0
                  0  1 0 0 0 0
                  0  0 1 0 0 0
                  0  0 0 1 0 0
                  0  0 0 0 1 0
                  0  0 0 0 0 1
             }
         )

         # Exemplo 2: Escolhe o ND-xform de um objeto -- um geométrico ou um grupo de
         # cameras. Fornecendo a definição acima, o ND-xform escolhido coloca o objeto em (-3 0 1 1
         # 0) no espaço pentadimensional.

         (ND-xform-set focus : fred)

         # ou

         (ND-xform-set g1 : fred)