Next: , 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)