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ção6x6
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)