Se um vetor 3D representa um ponto, como pode ter um comprimento?

27

Estou tentando entender a aritmética vetorial (e especificamente seu uso no mecanismo Unity). Eu não sou capaz de descobrir como um vetor pode ter um comprimento (magnitude), mesmo que ele represente apenas um ponto (posição e direção)?

Isso significa que a magnitude é simplesmente a sua distância do ponto de origem (0, 0, 0)? Ou eu estou esquecendo de alguma coisa?

Mohammed Noureldin
fonte
14
Considere um escalar, também conhecido como número. Pode significar um valor absoluto, uma diferença, uma porcentagem, etc.
Peter
11
Normalizedno contexto significa um novo vetor que preserva o Directionmas tem Magnitudede 1. Ou seja, o Normalizedvetor é criado escalando o vetor original.
Theraot
@ Theraot, muito obrigado, essa frase me ajudou muito!
Mohammed Noureldin
19
Não faz. Representa um deslocamento. Apenas aponta para algum ponto se você o considera um vetor de posição , caso em que denota o deslocamento de (0, 0, 0). O comprimento desse vetor de posição é a distância do ponto até a origem.
Polygnome
11
@ Peter Receio ter que discordar de você. Definições algébricas padrão de um vetor praticamente não significam nada . geralmente é útil considerá-lo como tal, pois os vetores de posição podem ser usados ​​para representar pontos, mas não são pontos. "5 metros" é sempre uma distância (ou comprimento), nunca será uma hora ou cor. Muitas vezes, é útil usar símbolos diferentes - eu pessoalmente nunca usaria (5, 5, 5) para denotar um vetor , sempre usaria (5, 5, 5) ^ T (T para transposição) ou usaria representação de coluna adequada onde suportado. Porque dizer que um vetor é um ponto introduz imprecisões.
Polygnome

Respostas:

20

Isso significa que a magnitude é simplesmente a distância do ponto de origem (0, 0, 0)?

A resposta tl; dr pode ser: Sim, você pode imaginar assim.

Mas não tenho certeza se isso pode não levar a um entendimento errado.


Um vetor não é um ponto, e há uma diferença crucial entre os dois!

O fato de um vetor geralmente ser representado como uma "seta" pode dar uma impressão errada. De fato, um vetor não é uma única seta. Seria mais preciso dizer que um vetor é o conjunto de todas as setas que têm o mesmo comprimento e direção . (A seta que normalmente é pintada é apenas um representante de todas essas setas). Mas não quero ir muito longe nos detalhes chatos da matemática aqui.

Mais importante, há uma diferença crucial entre um ponto e um vetor, que se torna óbvio na programação gráfica quando você transforma o ponto ou o vetor. Não estou familiarizado com o Unity, mas, olhando rapidamente para a documentação, eles estão modelando a diferença mais importante entre um ponto e um vetor na Matrix4x4classe. Tem duas funções diferentes:

A diferença é, grosso modo, que um vetor não é traduzido, enquanto um ponto é. Imagine a seguinte matriz 4x4:

1.0   0.0   0.0   1.0
0.0   1.0   0.0   2.0
0.0   0.0   1.0   3.0
0.0   0.0   0.0   1.0

Ele descreve uma tradução sobre (1,2,3). Agora, quando você tiver o seguinte pseudocódigo

Vector3 tp = matrix.MultiplyPoint (new Vector3(2,3,4));
Vector3 tv = matrix.MultiplyVector(new Vector3(2,3,4));

Então tpserá (3,4,5), enquanto tvainda será (2,3,4). A conversão de um vetor não o altera (porque, como mencionado acima, é o conjunto de todas as setas com a mesma magnitude e direção).


O fato de o Unity usar a Vector3classe para vetores e pontos é legítimo, mas pode ser confuso. Outras bibliotecas diferenciam dedicadamente entre Point3De Vector3D, às vezes com uma base comum como Tuple3D.

Marco13
fonte
3
Você tem certeza de que "um vetor é o conjunto de todas as setas que têm o mesmo comprimento e direção" faz sentido, matematicamente? Parece que você está falando sobre algumas classes de equivalência, mas espaços vetoriais não são algo que eu já li definido como classes de equivalência. - Seja como for, você levanta uma muito importante ... ahem, ponto , com a distinção entre espaços vetoriais e espaços afins , que são os nomes matemáticas para os tipos de todos os vetores / de todos os pontos, respectivamente.
leftaroundabout
3
A vector is, in fact, not a single arrow, você está certo, representando o Vector3 como uma única seta é exatamente o que me confundiu. +1 por mencionar esta frase crítica.
Mohammed Noureldin
@leftaroundabout Existem diferentes definições possíveis para vetores (além de ser "algumas n-tuplas ..." ou mais). Na álgebra linear, imagine o conjunto de todas as setas e a relação (equivalência! -) "Tem o mesmo comprimento e direção". A fatoração do conjunto de todas as setas por essa relação produz as classes de equivalência. Eu não queria falar sobre detials matemáticos (também não sou matemático), mas esperava deixar claro que um vetor não é "uma flecha que começa em (0,0,0)". O ponto (...) é: Um vetor não tem uma "posição".
Marco13
2
É ainda mais complicado pelo uso do termo por ciência da computação vectorsignificar matriz ou múltiplo! Em C ++, você pode ter um, std::vector<Vector3>por exemplo. A vectorde Vectors.
User1118321 31/05
Ah, então o que você quer dizer é que, a partir de um espaço afim X , você define para quaisquer dois pontos ( p , q ) uma seta sA ( X ) como o caminho mais curto (ie função diferenciável com derivada absoluta mínima integrada) s : [0,1] → X de modo a que s (0) = p e s (1) = q . Então o espaço dos vetores é o conjunto de classes de equivalência A ( X ) / ~ onde s ~ σ se ∂ s / ∂ t = ∂ σ/ ∂ t para todos t ∈] 0,1 [? Isso faz sentido, embora eu não pense que você possa usar isso como uma definição de vetores, porque a diferenciação já depende deles.
leftaroundabout
36

Isso significa que a magnitude é simplesmente a distância do ponto de origem (0, 0, 0)?

É exatamente isso.

Entre outras coisas, um vetor pode representar um ponto (uma posição), uma direção e / ou uma velocidade, dependendo do contexto.

Se você possui esta variável:

Vector3 mPosition;

Geralmente representa apenas a posição, ou seja, onde está localizado no espaço 3D.

Se você possui esta variável:

Vector3 mDirection;

Geralmente representa a direção. Normalmente, esses vetores são vetores unitários, ou seja, vetores de comprimento 1 (mas nem sempre é necessário). Um vetor unitário e um vetor Normalizado são a mesma coisa, ambos têm comprimento 1. Esses vetores são frequentemente usados ​​com outros vetores para alterar suas posições.

Ao normalizar um vetor, você perde seu comprimento (sua magnitude), mas a direção permanece a mesma. Há situações em que você só precisa da direção (por exemplo, quando deseja mover um objeto nessa direção), e ter a magnitude (sem unidade de comprimento) no vetor introduziria resultados inesperados de cálculo.

Se você precisar de um vetor normal para um único cálculo, poderá usá- myVec3.normalizedlo, isso não afetará myVec3, e se você pretende usar esse vetor normalizado frequentemente, provavelmente deverá criar uma variável:

Vector3 myVec3Normalized = myVec3.normalized;

para evitar chamadas repetidas para o normalizedmétodo

E se você vir variáveis:

Vector3 mVelocity;

Geralmente representa uma força / velocidade: esses vetores representam uma direção e sua magnitude (seu comprimento) é importante. Eles também podem ser representados com Vector3 mDirection;e a float mSpeed;.

Todos estes são utilizados em relação à sua origem local, que pode ser (0, 0, 0) ou pode ser outra posição.

Vaillancourt
fonte
4
Destrói uma parte da informação contida no vetor, e essa informação é a magnitude. A direção permanece a mesma, no entanto.
6
@Eldy É mais precisa que a nota que myVec3.normalizedretorna uma nova Vector3, tendo a mesma direção, mas magnitude 1. myVec3permanece inalterada
Caleth
4
@ NPSF3000 Esses seriam um empurrão e um pulo , não há consenso sobre nomes além disso. Estamos todos felizes que idiotas não são comuns.
Theraot
11
@ NPSF3000 Alguns sugerem que as quarta, quinta e sexta derivadas de posição devem ser estaladas, estaladas e pop! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter
11
Talvez mude these vector are unit vectorspara direction vectors are unit vectorsalgo assim? Porque, como é agora, um leitor pode ficar confuso pensando que thesese refere aos dois exemplos anteriores, mPosition e mDirection . (Foi assim que li no início.) #
318/17
8

Isso significa que a magnitude é simplesmente a distância do ponto de origem (0, 0, 0)?

Você pode vê-lo dessa maneira, mas apenas vê-lo dessa maneira pode levar a um entendimento errado.


Primeiro de tudo, um vetor não é um ponto, e um ponto não é um vetor.

A diferença entre um vetor e um ponto é a mesma que entre uma duração e uma hora do dia . O primeiro é um intervalo de tempo, o último é um único ponto no tempo. Obviamente, 6 horas não é o mesmo que 6 horas. Você não diria "A corrida dura 1 hora" e você não diria "Vamos nos encontrar às 13 horas". A corrida dura uma hora - um intervalo - e você se encontra às 13 horas - um momento específico.

O mesmo se aplica aos vetores e ponto. Um vetor é um intervalo - um deslocamento, se você desejar. Aponta em uma certa direção e, sim, tem um comprimento.

Pontos e vetores são, portanto, relacionados, assim como durações e horas do dia. A corrida começa às 13 horas e termina às 15 horas. Ambos são pontos no tempo. Mas 15 horas - 13 horas = 2 horas, uma duração. A corrida dura duas horas, e não duas horas.

O mesmo se aplica aos pontos. A diferença entre o ponto A e B é denotada como ⃗v = B - A, onde denotesv indica um vetor e A e B indicam pontos.

Agora, há algo que chamou um vetor de posição . Você pode considerar um vetor um ponto até certo ponto, quando diz que os vetores apontam da origem para um outro ponto. Em outras palavras: se todos os seus amigos souberem que você chama horários do dia como durações desde meia-noite (0 horas), você pode dizer "Nos encontramos às 6 horas". Eles saberiam que 0 horas + 6 horas = 6 horas e, portanto, quando encontrá-lo. Isso é de fato o que os tempos navais fazem. "Nos reunimos às seis e seiscentas horas" significa 6 horas.

Portanto, o vetor <1,2,3> aponta para o ponto (1,2,3), se você considerar a origem o ponto de ancoragem, e sim, o comprimento desse vetor é a distância desse ponto da origem.

Mas o vetor <1,2,3> também aponta de (1,1,1) a (2,3,4) e, nesse caso, seu comprimento indica a distância entre esses dois pontos.


Então, como você pode ver, um vetor tem um comprimento porque não é um ponto, mas um intervalo - um deslocamento.

Polygnome
fonte
Leitura relacionada: Torsors
Buster
5

Um vetor pode representar uma linha entre dois pontos no espaço 3D (direção e distância) ou uma localização no espaço 3D (comprimento é a distância da origem).

Se você tem o ponto A e o ponto B, BA = AB = a direção e a distância que você precisaria percorrer para ir de A a B.

Ian Young
fonte
Obrigado, mas o que significa usar o Vector3.Normalized? a documentação diz: Returns this vector with a magnitude of 1isso não destrói as informações salvas no vetor? realmente que Magnitudee Normalizedsão o que fez me confundiu.
Mohammed Noureldin
Seja um ponto no espaço ou uma flecha indicando velocidade, tudo está na sua cabeça. Os mesmos dados representam ambos.
Onipresente
@MohammedNoureldin Um vetor normalizado é um de comprimento unitário (sendo 1). Sim, se você normalizar um vetor, perde as informações de comprimento ou magnitude. Se você precisar de ambos (útil em muitas ocasiões), obtém o comprimento do vetor e normaliza-o.
Ian Young
1

O que o Unity diz sobre pontos versus vetores não faz sentido a longo prazo, porque as APIs de geometria apenas escolhem definições distintas para tornar a ferramenta mais acessível, elas não correspondem à forma como essas coisas são conceituadas na geometria. Dê uma olhada nas implementações das classes, se puder. Por ser arbitrário, conhecer sua definição é a única maneira de entender qual é o conceito. Divulgação completa, não tenho experiência com o Unity.

Um vetor é um ponto em um espaço vetorial , em que o conceito de um ponto na geometria é codificado por elementos do conjunto subjacente. Um espaço vetorial tem um vetor distinto, chamado origem ou 0 . Álgebra linear é uma tentativa de codificar um fragmento da geometria euclidiana com uma origem algebricamente.

A flecha e seu comprimento

Os movimentos em um espaço de pontos são freqüentemente interpretados como todas as flechas dos pontos de origem / antes dos pontos de destino / depois.

Uma função de dois argumentos pode ser aplicada a um argumento para produzir a função de um argumento - podemos falar de x +, a função que leva cada vetor y ao vetor x + y . Esta é a tradução associada com a adição de x . As setas associadas vão dos pontos y aos pontos x + y . Veja: aplicação parcial , currying .

Então, por que usamos apenas uma seta ? A seta da origem aponta para um vetor específico, x em x + - a origem é a identidade da adição do vetor. Assim, podemos recuperar a tradução x + apenas de seu valor x +0 = x .

Como representação gráfica do espaço, a representação da seta tem a ver com a nossa capacidade de extrapolar visual ou fisicamente o efeito de uma tradução do valor que a determina. Quando temos essa capacidade?

Dar uma norma ao espaço vetorial, tornando-o um espaço vetorial normalizado, é fornecer uma noção do comprimento de um vetor que faça sentido como sua distância de 0. Além disso, deve ser uma distância que satisfaça a desigualdade do triângulo, que é uma forte restrição de como os comprimentos de dois vetores se relacionam com os de sua soma. De comprimento, podemos definir a distância para fazer deste um espaço métrico , e uma geodésica é um caminho intrinsecamente reto, pois é o mais curto possível. A norma euclidiana induz a distância euclidiana e a geodésica é o segmento de linha das setas, mas se você desenhar as setas como geodésicas usando diferentes normas, você pode extrapolar o efeito geométrico da tradução das geodésicas para aprender sobre a geometria.

O significado de ponto e vetor

Em alguns casos, na geometria de jogos, seu espaço de pontos não é um espaço vetorial . Um espaço afim da dimensão n pode ser incorporado em um espaço projetivo da dimensão n . Mapas afins são reduzidos a projetividades. As projetividades também permitem que você faça FOV, pois acho que não é afim. As projetividades têm benefícios:

O espaço n projetivo sobre um campo pode ser construído a partir do espaço linear ( n +1) (espaço vetorial), tratando os pontos do espaço projetivo como as linhas através da origem do espaço linear. Os planos através da origem, por sua vez, fornecem linhas projetivas. Multiplicar vetores por uma matriz fixa é um mapa linear , é para isso que serve a multiplicação de matrizes. Os mapas lineares preservam a origem e são compatíveis com a incidência. Em particular, se f é um automorfismo linear ( correspondente a uma matriz invertível ( n +1) x ( n +1)), e duas linhas L, M através da origem abrangem um plano A , entãof L, f M são linhas através da origem que mede f A , de modo que f também preservará a incidência no espaço projetivo - uma matriz invertível tem uma projeção associada. A multiplicação de matrizes codifica a composição de mapas lineares e, portanto, das projetividades.

Removendo a origem do espaço linear, todos os pontos em uma determinada linha através da origem são múltiplos escalares um do outro. Explorando esse fato, a homogeneização escolhe um ponto linear para substituir cada ponto projetivo e uma matriz invertível para substituir cada transformação projetiva (como nos mapas afins 2D -> 2D como vídeo 3D -> mapas linear 3D ), maneira que os representantes são fechados sob produtos matriciais e vetor matricial e dão e são dados por coisas projetivas únicas. Esta descrição da construção do plano projetivo a partir do plano linear une algumas coisas.

Portanto, no pipeline da matriz modelo-vista-projeção, estamos usando vetores para representar os pontos do nosso espaço projetivo, mas o espaço projetivo não é um espaço vetorial, e nem todos os vetores no espaço vetorial que estamos usando representam pontos da nossa geometria (veja a figura do plano afim à direita ). Usamos matrizes de tradução em vez de soma vetorial, se queremos traduções. Às vezes, as pessoas chamam vetores de pontos projetivos ou afins, especialmente ao usar uma configuração nesse sentido.

Loki Clock
fonte
2
+1. Mas meu pressentimento é que a maioria das pessoas que entendem o idioma que você está usando já está ciente da resposta à pergunta original, por isso recomendo ajustar a resposta para leitores casuais.
Peter
@ Peter Achei difícil resolver tudo. Gostaria de torná-lo mais acessível, mas não sei como fazer isso sem elaboração. No entanto, quando eu estava trabalhando com o OpenGL, perguntei-me sobre o significado de matrizes homogêneas, matrizes de perspectiva e como as matrizes de tradução foram descobertas como uma alternativa à tradução pela soma, portanto, é possível que isso não seja muito profundo. O formalismo é a linguagem e, dando o fraseado certo, penso em como discutir os conceitos. No entanto, é muito opaco ser conciso, então isso é mais como uma lista de leitura do Wiki.
Loki Relógio
Eu adicionei alguns links, em particular um vídeo de mapas afins sendo feitos em uma dimensão mais alta como mapas lineares. Espero que ajude.
Loki Clock
legais. merece mais votos positivos.
Peter
-1

O comprimento (ou magnitude) do vetor é square root of (x*x+y*y+z*z). Os vetores são sempre considerados como um raio que passa da origem <0,0,0> até o ponto descrito no vetor<x,y,z>

A documentação da unidade sobre isso é encontrada aqui .

Stephan
fonte
Desculpe, mas isso está completamente errado. Se eu tiver dois pontos A e B, v = BA é o vetor que vai de A a B. v não passa pela origem nesse caso. Um vetor não é um ponto. pode ser usado para representar um ponto (como vetor de posição), mas é algo diferente. Por favor, conserte o básico algébrico.
precisa
Atualizei a resposta para remover a confusão, mas estou fornecendo referência à documentação do que é um Vector3 no Unity, e minha resposta estava alinhada com todas as respostas de classificação mais alta, incluindo a sua.
Stephan
Se você ler atentamente a documentação da unidade, notará que ela nunca menciona a origem, pois a origem não tem nada a ver com o comprimento do vetor. O vetor entre (1,1,1) e (2,3,4) é <1,2,3> e tem um comprimento de sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3,9, o que é a distância entre esses dois pontos. Ele nunca sequer toca a origem de todo . Estou confuso como você poderia pensar a minha resposta concorda com você, porque não, em tudo .
precisa