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ção6x6chamada # "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)