Qual é a diferença entre uma transformação de ponto e uma transformação de vetor?

11

Isto é o que meu professor me disse nos cursos:

Consideramos apenas matrizes 4 * 4. Eles são usados ​​para girar, dimensionar ou converter objetos (ou qualquer combinação dessas operações). Matrizes também são usadas posteriormente na implementação do modelo de câmera virtual. Se você não souber a diferença entre uma transformação vetorial e uma transformação de ponto, procure-a.

Não consigo encontrar uma resposta e fiz uma conta para este site apenas para esta pergunta.

SA
fonte
1
Em complemento a todas as outras respostas e porque outras pessoas já respondeu a esta pergunta de comprimento em outros lugares você pode verificar: scratchapixel.com/lessons/...
user18490

Respostas:

9

Aqui está a resposta simples.

Em 4D, para poder multiplicá-los por uma matriz 4x4, os vetores são representados como (x, y, z, 0) e os pontos são representados como (x, y, z, 1).

Como a quarta linha de uma matriz 4x4 representa a conversão da matriz, as representações acima fazem com que os pontos sejam afetados pela conversão, mas os vetores não.

Os vetores e pontos são afetados pela rotação, escala, etc.

Embargo:

Há uma discussão mais profunda se você espera que os vetores tenham certas propriedades. Por exemplo, se você transformar o normal de um triângulo pela mesma matriz que transforma os vértices do triângulo, provavelmente não será mais o vetor normal desse triângulo. Isso ocorre porque os vetores normais têm uma espécie de relação inversa com os vértices dos quais são calculados.

Alan Wolfe
fonte
As normais não funcionam porque não são vetores. Porém, não conheço uma boa introdução ao conceito.
MB Reynolds
@MBReynolds Em um sentido matemático, os normais são tão vetores quanto pontos ou direções. O problema aqui é que as transformações que aplicamos aos pontos de uma superfície para transformá-los não se aplicam às normais.
Nbro 18/01/19
2
normais de superfície são bivetores, não vetores. Podemos encontrar um normal pelo produto cruzado de dois vetores, o resultado é um bivetor. Veja por Vogensen: gist.github.com/pervognsen/c6b1d19754c2e8a38b10886b63d7bf2d
MB Reynolds
4

4×44×4

4×4

Agora, a pergunta é: como passamos de um sistema de coordenadas 3D para um sistema 4D ? A resposta é " coordenadas homogêneas ".

4×4

4×44×43D

Como fazemos isso?

Distinguimos entre vetores de direção e posição . Os vetores de direção, como o nome sugere, têm uma direção na qual estão apontando; também nos preocupamos com o tamanho deles, mas eles não são afetados pelas traduções, pois não nos importamos com a posição deles. Os vetores de posição (ou simplesmente "pontos") podem ser traduzidos ou movidos; eles geralmente são representados em relação à origem, ou seja, como um vetor da origem até o próprio ponto.

0401

3Dv=(v1v2v3)v=(v1v2v30)u=(u1u2u3)u=(u1u2u31)

3D4th10

nbro
fonte
(wx,wy,wz,w)w0(x,y,z)w=1wusando multiplicação de matriz 4D também.
Ilmari Karonen #
2

Se você procurar a definição de um vetor e um ponto, então um vetor é:

Uma quantidade, como velocidade, completamente especificada por uma magnitude e uma direção. http://www.thefreedictionary.com/vector

E um ponto é:

Um objeto geométrico sem dimensão que não possui propriedades, exceto localização. http://www.thefreedictionary.com/point

Então, você poderia dizer que um vetor é uma direção com escala e um ponto é um local.

Então, se você transformar um vetor, basta girá-lo e escalá-lo. Com um ponto, você também o converte (a rotação e o dimensionamento de um ponto estão em torno da origem, uma vez que emite apenas um local, o ponto em si não pode ser girado).

Na maioria das vezes, um vetor e um ponto são colocados no mesmo contêiner, um vetor com 4 componentes. A única diferença é o componente w. Se o componente w for 0, é uma direção. Se for 1, o vetor é um ponto.

A razão para isso pode ser encontrada na própria matriz. Ele utiliza a maneira como você multiplica um vetor com 4 componentes com uma matriz 4x4. Se você não sabe como isso funciona, sugiro um google rápido.

[rot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslationrot+scalerot+scalerot+scaletranslation0001]

Como você pode ver, se o último componente for 0, você terá uma multiplicação com 0 e, portanto, o resultado será 0 e não haverá conversão.

Isso facilita na computação gráfica com objetos poligonais. Você tem a mesma matriz de transformação para transformar as posições, mas também as normais. Como os normais têm seu componente w definido como 0 e o componente w das posições é 1, os normais são apenas rotacionados (e também redimensionados, o que pode levar a coisas estranhas, portanto, na maioria das vezes, o normal é normalizado depois. Não é ' Na verdade, é recomendável usar a mesma matriz para posições e rotações por causa de coisas estranhas! Veja o comentário de @JarkkoL.) e as posições são traduzidas (e giradas e redimensionadas em torno da origem).

Espero não ter cometido um erro: P, e isso ajudou você!

bram0101
fonte
2
As normais não são transformadas com a mesma matriz de transformação que as posições. Você precisa calcular o inverso da transposição da sub-matriz 3x3 para transformar adequadamente normais para transformações com escala e / ou inclinação não uniformes.
perfil completo de JarkkoL
@JarkkoL sim, isso é verdade, você está certo com isso. É melhor não usar a mesma matriz, mas, dependendo da implementação, isso é feito. Na maioria das vezes, as pessoas não se importam tanto com a distorção das normais, porque elas não usam escala ou uniformidade não uniforme. Essa parte sobre transformar posições e normais era mais sobre o fato de poder ser útil usar um contêiner.
bram0101