programing

단위 벡터가 필요한 이유(즉, 벡터를 정규화해야 하는 이유)는 무엇입니까?

powerit 2023. 7. 22. 10:32
반응형

단위 벡터가 필요한 이유(즉, 벡터를 정규화해야 하는 이유)는 무엇입니까?

나는 게임 AI에 관한 책을 읽고 있습니다.

사용되는 용어 중 하나는 벡터를 단위로 변환하는 벡터를 정규화하는 것입니다. 하기 는 각 합니다.x,y그리고.z그 크기로

벡터를 사용하기 전에 벡터를 하나의 단위로 만들어야죠?

그리고 우리가 단위 벡터를 사용해야 하는 시나리오를 알려줄 수 있는 사람이 있습니까?

감사합니다!

벡터를 정규화할 필요는 없지만, 많은 방정식을 간단하게 만들 수 있습니다.또한 API를 더 작게 만들 수 있습니다. 어떤 형태의 표준화도 필요한 기능의 수를 줄일 수 있습니다.

여기 간단한 예가 있습니다.두 벡터 u와 v 사이의 각도를 찾으려고 합니다. 단위 벡터인 경우 각도는 단지 arccos(uv)입니다. 단위 벡터가 아닌 경우 각도는 arccos(uv/(|u| |v|))입니다.그런 경우에는 결국 u와 v의 표준을 계산하게 됩니다.

존 D로서.쿡은 말합니다. 주로 벡터 자체가 아니라 방향에 관심이 있기 때문에 이 작업을 수행하는 것입니다.상황에 따라 크기 정보는 필요하지 않고 방향 자체만 필요할 가능성이 높습니다.다른 계산을 왜곡하지 않도록 크기를 제거하기 위해 정규화하면 다른 많은 것이 단순해집니다.

AI 측면에서 - P1(AI 나쁜 사람)과 P2(당신의 영웅) 사이의 벡터 V를 나쁜 사람이 이동하는 방향으로 가져간다고 상상해 보십시오.당신은 나쁜 사람이 비트당 N의 속도로 움직이기를 원합니까 - 당신은 이것을 어떻게 계산합니까?음, 우리는 각 박자마다 벡터를 정규화하고, N을 곱하여 그들이 얼마나 멀리 이동했는지를 알아내거나, 아니면 처음부터 방향을 사전 정규화하고, 단위 벡터를 매번 N을 곱합니다. 그렇지 않으면 나쁜 사람은 영웅으로부터 더 멀리 이동할 것입니다!영웅이 입장을 바꾸지 않는다면, 그것은 걱정할 계산이 하나 줄어들 것입니다.

그런 맥락에서, 그것은 큰 문제가 아닙니다. 하지만 만약 당신이 100명의 나쁜 사람들을 가지고 있다면 어떨까요?아니면 천 개?만약 당신의 AI가 나쁜 사람들의 조합을 처리해야 한다면요?갑자기 비트당 100개 또는 1000개의 정규화를 절약하게 됩니다.이것은 소수의 곱셈과 각 곱셈의 제곱근이기 때문에 결국 데이터를 사전에 정규화하지 않으면 AI 처리 속도가 저하될 것입니다.

좀 더 넓게 말하자면, 수학은 정말 일반적입니다. 사람들은 여기서 3D 렌더링과 같은 작업을 하고 있습니다. 예를 들어, 표면의 표준을 통일하지 않았다면 렌더링당 수천 개의 정규화가 가능할 것입니다. 이는 완전히 불필요합니다.각 함수가 계산을 수행하도록 하거나 데이터를 사전 정규화하는 두 가지 옵션이 있습니다.

프레임워크 설계자의 관점에서 볼 때, 후자가 본질적으로 더 빠릅니다. 사용자가 데이터를 정규화하려고 생각하더라도 전자를 가정할 경우 동일한 정규화 루틴을 수행해야 하거나 각 기능의 두 버전을 제공해야 하는 번거로움이 있습니다.하지만 사람들이 어떤 버전의 기능을 호출할지 생각하게 만드는 시점에서 올바른 기능을 호출할 수 있을 만큼 충분히 생각하게 하고, 처음부터 제공하여 성능을 위해 올바른 작업을 수행하도록 할 수도 있습니다.

크기가 아니라 벡터가 가리키는 방향에만 관심이 있기 때문에 벡터를 정규화하는 경우가 많습니다.

구체적인 시나리오는 일반 매핑입니다.표면에 부딪히는 빛과 표면에 수직인 벡터를 결합함으로써 깊이에 대한 환상을 줄 수 있습니다.표면의 벡터는 평행 방향을 정의하고 벡터에 대한 크기는 실제로 계산을 잘못합니다.

우리는 벡터를 단위로 변환한 후에 그것으로 무엇인가를 해야 합니다.

이 문은 올바르지 않습니다.모든 벡터가 단위 벡터는 아닙니다.

좌표 공간의 기초를 이루는 벡터는 다음과 같은 두 가지 매우 유용한 특성을 가지고 있습니다.

  1. 그것들은 직교합니다.
  2. 단위 벡터 - 크기 = 1

이렇게 하면 3D 공간에 임의의 벡터를 단위 벡터의 선형 조합으로 쓸 수 있습니다.

alt text
(출처: equationsheet.com )

필요할 경우 각 구성 요소를 크기로 나누어 이 벡터를 단위 벡터로 변환하도록 선택할 수 있습니다.

alt text
(출처: equationsheet.com )

좌표 공간이나 기저 벡터가 무엇인지 모른다면, 훨씬 더 나아가기 전에 그래픽의 수학에 대해 조금 더 배우는 것을 추천합니다.

이미 제공된 답변 외에, 저는 두 가지 중요한 측면을 언급하고 싶습니다.

삼각법은 단위 원에 정의됩니다.

모든 삼각 함수는 단위 원 위에 정의됩니다.갯수pi자체는 단위 원 위에 정의됩니다.

벡터를 정규화하면 스케일링을 한 번도 하지 않고 모든 삼각 함수를 직접 사용할 수 있습니다.앞에서 언급했듯이, 두 단위 벡터 사이의 각도는 단순하게 다음과 같습니다.acos(dot(u, v))추가 확장 없이.

Trigonometric Circle

단위 벡터를 사용하면 크기와 방향을 구분할 수 있습니다.

벡터는 크기와 방향이라는 두 가지 유형의 정보를 전달하는 양으로 해석될 수 있습니다.힘, 속도, 가속도가 중요한 예입니다.

크기와 방향을 개별적으로 처리하려면 양식을 표시합니다.vector = magnitude * direction,어디에magnitude는 스칼라이고direction단위 벡터는 종종 매우 편리합니다.크기의 변화는 스칼라 조작을 수반하며 방향의 변화는 크기를 수정하지 않습니다.direction의 크기를 보장하려면 단위 벡터여야 합니다.vector와 정확히 같습니다.magnitude.

언급URL : https://stackoverflow.com/questions/2304634/why-do-we-need-a-unit-vector-in-other-words-why-do-we-need-to-normalize-vector

반응형