3D 벡터가 점을 나타내는 경우 어떻게 길이를 가질 수 있습니까?


27

벡터 산술 (특히 Unity 엔진에서의 사용)을 이해하려고합니다. 벡터가 점 (위치 및 방향) 만 나타내더라도 어떻게 길이 (크기)를 가질 수 있는지 알아낼 수 없습니까?

이것은 크기가 단순히 원점 (0, 0, 0)으로부터의 거리라는 것을 의미합니까? 아니면 뭔가 빠졌습니까?


14
숫자라고도하는 스칼라를 고려하십시오. 절대 값, 차이, 백분율 등을 의미 할 수 있습니다.
Peter

1
Normalized문맥 상, Direction그러나 Magnitude1 을 유지하는 새로운 벡터를 의미한다 . 즉, Normalized벡터는 원래 벡터를 스케일링함으로써 생성된다.
Theraot

@ Theraot, 대단히 감사합니다, 그 문장이 저에게 많은 도움이되었습니다!
Mohammed Noureldin

19
그렇지 않습니다. 변위를 나타냅니다. 위치 벡터로 간주하면 특정 지점 만 가리 킵니다 .이 경우 (0, 0, 0)의 변위를 나타냅니다. 이러한 위치 벡터의 길이는 점과 원점의 거리입니다.
Polygnome

1
@ 피터 나는 당신의 의견에 동의하지 않는 것이 두렵다. 벡터의 표준 대수적 정의는 그 점이 아니라는 것을 의미합니다 . 이후 등을 고려의 자주 유용한 위치 벡터를 사용할 수 있습니다 나타냅니다 점을, 그러나 그들은 이다 점 없습니다. "5 미터"는 항상 거리 (또는 길이)이며 시간이나 색상이되지 않습니다. 그것은 종종 유용한 다른 기호를 사용하는 - 나는 개인적으로 (5, 5, 5)를 표시하기 위해 사용하지 않을 것 벡터를 , 난 항상 (전치을위한 T) (5, 5, 5) ^ T를 사용하거나 적절한 열 표현을 사용하는 것 지원되는 곳. 벡터 점 이라고 말하면 부정확 함이 생깁니다.
Polygnome

답변:


20

그 크기가 단순히 원점 (0, 0, 0)으로부터의 거리라는 것을 의미합니까?

TL; 박사의 대답은 할 수있다 : 예, 그런 상상 할 수 있습니다.

그러나 이것이 잘못된 이해로 이어지지 않을지 확실하지 않습니다.


벡터는 점이 아니며, 둘 사이에는 결정적인 차이가 있습니다!

벡터가 일반적으로 "화살표"로 표시된다는 사실은 잘못된 인상을 줄 수 있습니다. 사실 벡터는 단일 화살표가 아닙니다 . 벡터가 길이와 방향이 같은 모든 화살표 의 집합 이라고 말하는 것이 더 정확할 것입니다 . (일반적으로 페인트되는 화살표는 이러한 모든 화살표를 나타내는 하나 입니다). 그러나 나는 여기서 수학의 지루한 세부 사항에 너무 멀리 가고 싶지 않습니다.

더 중요한 것은 점과 벡터 사이에 결정적인 차이가 있다는 점 입니다. 점이나 벡터 를 변환 할 때 그래픽 프로그래밍에서 분명해집니다 . 나는 Unity에 익숙하지 않지만 문서를 한 눈에 살펴보면 Matrix4x4클래스 의 포인트와 벡터 사이의 가장 중요한 차이점을 모델링하고 있습니다. 두 가지 기능이 있습니다.

대략적으로 말하면, 벡터는 번역되지 않지만 점은 변환됩니다. 다음 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

(1,2,3)에 대한 번역을 설명합니다. 이제 다음 의사 코드가있을 때

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

그러면 tp(3,4,5)가되고, tv여전히 (2,3,4)가됩니다. 벡터를 번역해도 벡터는 변경되지 않습니다 (위에서 언급 한 것처럼 동일한 크기와 방향을 가진 모든 화살표 세트이기 때문에).


Unity가 벡터 포인트 모두에 Vector3클래스 를 사용한다는 사실 은 합법적이지만 혼동 될 수 있습니다. 다른 라이브러리는 때때로와 같은 공통 기반을 가지고 와 구별 합니다.Point3DVector3DTuple3D


3
"벡터는 길이와 방향이 같은 모든 화살표의 집합입니다"라고 수학적으로 의미가 있습니까? 동등성 클래스에 대해 이야기하는 것처럼 들리지만 벡터 공간은 내가 동등성 클래스로 정의한 적이 아닙니다. — 무엇이든, 당신 은 벡터 공간과 아핀 공간을 구별 하여 매우 중요한 ... ahem, point 를 제기 합니다 . 이것은 각각 모든 벡터의 유형 / 모든 포인트의 유형에 대한 수학적 이름입니다.
leftaroundabout

3
A vector is, in fact, not a single arrow, 당신은 맞습니다 .Vector3를 하나의 화살표로 표현하는 것이 정확히 혼란 스럽습니다. 이 중요한 문장을 언급 한 +1
Mohammed Noureldin

@leftaroundabout 벡터에 대한 다른 정의가있을 수 있습니다 ( "일부 n- 튜플 ..."이상). 선형 대수에서 모든 화살표 세트와 (동일!-) 관계가 "길이와 방향이 동일하다"고 상상해보십시오. 이 관계로 모든 화살표 세트를 인수 분해하면 동등성 클래스가 생성됩니다. 나는 수학적 detials (나도 수학자가 아니야)에 대해 nitpick하고 싶지 않았지만, 벡터가 "(0,0,0에서 시작하는 화살표)"가 아님을 분명히하고 싶었다. 점 (...)은 다음과 같습니다. 벡터에 "위치"가 없습니다.
Marco13

2
컴퓨터 과학에서이 용어 vector를 배열 또는 여러 개로 사용하면 더욱 복잡해집니다 ! C ++에서는 std::vector<Vector3>예를 들어 가질 수 있습니다 . vectorVector의.
user1118321 2016 년

아 그래서 뜻하는 아핀 스페이스부터이며 X 는 임의의 두 지점 (위한 정의 P , Q )는 화살표 S ∈ ( X )와 같은 최단 거리 (최소의 집적 절대 유도체 즉, 미분 함수) S : [0,1] → X 이므로 s (0) = ps (1) = q 입니다. 이어서 벡터의 공간 등가 클래스들의 세트는 ( X ) / ~ 여기서 S ~ σ 경우 ∂ S / ∂ t = ∂ σ/ ∂ t 모두 t ∈] 0,1 [? 미분은 이미 벡터에 의존하기 때문에 이것을 벡터 의 정의 로 사용할 수 있다고 생각하지는 않습니다 .
leftaroundabout

36

그 크기가 단순히 원점 (0, 0, 0)으로부터의 거리라는 것을 의미합니까?

바로 그거야.

무엇보다도, 벡터는 상황에 따라 점 (위치), 방향 및 / 또는 속도를 나타낼 수 있습니다.

이 변수가있는 경우 :

Vector3 mPosition;

일반적으로 위치, 즉 3D 공간에있는 위치 나타냅니다 .

이 변수가있는 경우 :

Vector3 mDirection;

일반적으로 방향을 나타냅니다. 일반적으로 이러한 벡터는 단위 벡터, 즉 길이가 1 인 벡터이지만 항상 필요한 것은 아닙니다. 단위 벡터와 정규화 된 벡터는 모두 같은 것입니다. 둘 다 길이 1입니다.이 벡터는 종종 다른 벡터 와 함께 위치를 변경하는 데 사용됩니다 .

벡터를 정규화 할 때 길이 (크기)는 사라지지만 방향은 동일하게 유지됩니다. 방향 만 필요한 경우 (예 : 객체를 해당 방향으로 이동하려는 경우), 벡터에 (단위 길이가 아닌) 크기가 있으면 예기치 않은 계산 결과가 발생할 수 있습니다.

단일 계산에 법선 벡터가 필요한 경우을 사용할 수 있으며 myVec3.normalized에는 영향을 미치지 않으며 myVec3정규화 된 벡터를 자주 사용하려는 경우 변수를 만들어야합니다.

Vector3 myVec3Normalized = myVec3.normalized;

normalized메소드 에 대한 반복 호출을 피하기 위해 .

그리고 변수가 보이면 :

Vector3 mVelocity;

그것은 일반적으로 힘 / 속도를 나타냅니다이 벡터는 방향을 표현 하고 자신의 크기 (그 길이 것은) 중요합니다. 그들은 또한으로 표현 될 수 Vector3 mDirection;float mSpeed;.

이들 모두는 (0, 0, 0)이거나 다른 위치가 될 수있는 로컬 원점과 관련하여 사용됩니다.


4
벡터에 포함 된 정보의 일부를 파괴하며 해당 정보는 크기입니다. 그러나 방향은 동일하게 유지됩니다.

6
그것은 그 주에 더 정확 @Eldy 것을 myVec3.normalized리턴한다 새로운 Vector3는 같은 방향으로 만 크기 1.있는 것은 myVec3변경되지 않습니다
Caleth

4
NPSF3000 @ 사람들이 될 것이다 바보동요 , 그 이상 이름에 대한 합의는 존재하지 않는다. 우리는 모두 바보가 흔하지 않은 것을 기쁘게 생각합니다.
Theraot

1
@ NPSF3000 일부는 위치의 4, 5, 6 차 미분이 스냅, 딱딱하고 팝이어야한다고 제안합니다! :-D en.wikipedia.org/wiki/Snap,_Crackle_and_Pop#Physics
gbmhunter

1
아마도 변경 these vector are unit vectorsdirection vectors are unit vectors또는 뭔가? 이제 독자는 these앞의 두 가지 예 mPosition 모두 를 언급하는 혼란스런 생각을 할 수 있기 때문입니다 mDirection. (이것이 처음에 읽는 방법입니다.)
Supr

8

그 크기가 단순히 원점 (0, 0, 0)으로부터의 거리라는 것을 의미합니까?

당신 그런 식으로 볼 수 있지만, 그런 식으로 만 보는 것은 잘못된 이해로 이어질 수 있습니다.


우선, 벡터는 점이 아니며, 점은 벡터가 아닙니다.

벡터 의 차이 는 기간시간의 차이와 같습니다 . 전자는 시간 간격이며 후자는 단일 시점입니다. 분명히 6 시간은 6시와 같지 않습니다. 당신은 "경주가 1시 간 지속된다"고 말하지 않을 것이며 "13 시간에 만나자"라고 말하지 않을 것입니다. 레이스는 1 시간 동안 지속되며 특정 시간 인 13시를 만납니다.

벡터와 점에도 동일하게 적용됩니다. 벡터는 간격-변위입니다. 그것은 특정 방향을 가리키고 있으며, 길이가 있습니다.

따라서 점과 벡터는 지속 시간과 시간과 마찬가지로 관련이 있습니다. 경기는 13시에 시작해서 15시에 끝납니다. 둘 다 시점입니다. 그러나 15시-13시 = 2 시간, 지속 시간. 경기는 2 시가 아닌 2 시간 동안 지속됩니다.

포인트에도 동일하게 적용됩니다. 점 A와 B의 차이는 ⃗v = B-A로 표시되며, 여기서 ⃗v는 벡터를 나타내고 A와 B는 점을 나타냅니다.

자, 위치 벡터 라는 것이 있습니다. 벡터가 원점에서 다른 점으로 향한다고 말할 때 벡터를 어느 정도의 점으로 간주 있습니다 . 다시 말해 : 모든 친구가 자정 (0시) 이후의 시간으로 하루 중 시간을 부르는 것을 알고 있다면 "6 시간 만남"이라고 말할 수 있습니다. 그들은 0시 + 6 시간 = 6 시임을 알고 언제 만나야하는지 알게 될 것입니다. 이것은 실제로 해군 시대가하는 일입니다. "우리는 6시 100 분에 만난다"는 6시를 의미합니다.

따라서 벡터 <1,2,3>은 점 (1,2,3)을 가리 킵니다. 원점을 기준점으로 간주하면이 벡터의 길이는 원점에서 해당 점의 거리입니다.

그러나 벡터 <1,2,3> 또한 행 (1,1,1)에서 점 (2,3,4)는, 그 경우에 그 길이 사이의 거리를 나타내고, 두 점.


보시다시피 벡터는 점이 아니라 간격 (변위)이기 때문에 길이가 있습니다.


관련 자료 : Torsors
Buster

5

벡터는 3D 공간의 두 점 (방향 및 거리) 또는 3D 공간의 위치 (길이는 원점과의 거리) 사이의 선을 나타낼 수 있습니다.

A 지점과 B 지점이 있으면 BA = AB = A에서 B로 이동하기 위해 이동해야하는 방향과 거리입니다.


고맙지 만 Vector3.Normalized를 사용한다는 것은 무엇을 의미합니까? 문서에 말합니다 : Returns this vector with a magnitude of 1그렇다고 벡터에 저장된 정보를 파괴하지 않습니까? 실제로 그 MagnitudeNormalized나를 혼동 무엇을 만들어집니다.
Mohammed Noureldin

우주의 지점이든 속도를 나타내는 화살표이든 모두 머리 속에 있습니다. 동일한 데이터가 둘 다를 나타냅니다.
Omnifarious

@MohammedNoureldin 정규화 된 벡터는 단위 길이 (1)입니다. 예, 벡터를 정규화하면 길이 또는 크기 정보가 손실됩니다. 둘 다 필요한 경우 (많은 경우에 유용) 벡터의 길이를 얻은 다음 정규화하십시오.
이안 영

1

지오메트리 API는 툴의 접근성을 높이기 위해 고유 한 정의를 선택하기 때문에 이러한 점이 지오메트리에서 개념화되는 방식과 일치하지 않기 때문에 Unity는 점과 벡터에 대해 장기적으로 의미가 없습니다. 가능하면 클래스의 구현을 살펴보십시오. 자의적이므로 정의를 아는 것이 개념이 무엇인지 이해하는 유일한 방법입니다. 완전한 공개, 나는 Unity 경험이 없습니다.

벡터는 벡터 공간 의 한 점입니다. 지오메트리의 한 점의 개념은 기본 집합의 요소로 인코딩됩니다. 벡터 공간에는 원점 또는 0이라는 고유 벡터가 있습니다. 선형 대수는 대수적으로 원점을 가진 유클리드 기하학 조각을 인코딩하려는 시도입니다.

화살표와 길이

포인트 공간을 가로 지르는 동작 은 소스 / 이전 포인트에서 목표 / 이후 포인트까지 모든 화살표로 해석되는 경우 가 많습니다 .

하나의 인수에 대한 함수를 생성하기 위해 두 개의 인수에 대한 함수를 하나의 인수에 적용 할 수 있습니다. 각 벡터 y 를 벡터 x + y 로 가져 오는 x +에 대해 말할 수 있습니다 . 이것은 x 추가와 관련된 번역 입니다. 연관된 화살표는 점 y 에서 점 x + y로 이어 집니다. 부분 적용 , 카레 참조 .

그럼 왜 우리는 단지 하나의 화살표를 사용합니까 ? 원점에서 화살표는 특정 벡터를 가리키고, x in x +-원점은 벡터 덧셈의 정체입니다. 따라서 x +0 = x 값에서 x + 변환을 복구 할 수 있습니다 .

공간의 그래픽 표현으로서, 화살표 표현은 그것을 결정하는 값으로부터 변환의 효과를 시각적으로 또는 물리적으로 외삽하는 능력과 관련이 있습니다. 우리는 언제 그 능력을 가지고 있습니까?

벡터 공간에게 제공하기 위해 표준 그것을 만드는 NORMED 벡터 공간 크기 의 개념이 제공하는 길이 도 0으로의 거리로서 타당한 벡터를,이 A가 삼각 부등식을 만족하는 거리로한다 두 벡터의 길이가 합의 길이와 어떤 관련이 있는지에 대한 강한 제약. 길이에서 거리정의 하여이 공간을 미터법 공간 으로 만들 수 있습니다 . 측지선 은 가능한 한 짧아 본질적으로 직선 인 경로입니다. 유클리드 놈은 유클리드 거리를 유도하고 측지선은 화살표의 선분이다하지만 화살표를 그리면 측지선 사용으로 상이한 규범측지학에서 변환의 기하 효과를 추정하여 기하에 대해 배울 수 있습니다.

점과 벡터의 의미

게임 지오메트리를 수행하는 경우 점의 공간이 벡터 공간이 아닙니다 . 차원 n 의 투영 공간은 차원 n 의 투영 공간에 내장 될 수있다 . 아핀 맵은 투영도로 축소됩니다. 또한 투영은 당신이 FOV를 할 수있게 해줍니다. 투사율에는 다음과 같은 이점이 있습니다.

필드 위 의 투영 n 공간 은 투영 공간의 점을 선형 공간의 원점을 통과하는 선으로 처리함으로써 선형 ( n +1) 공간 (벡터 공간) 으로부터 구성 될 수 있습니다 . 원점을 통한 평면은 차례로 투영 선을 제공합니다. 벡터에 고정 행렬을 곱하는 것은 선형 맵 입니다. 이것이 행렬 곱셈입니다. 선형 맵은 원점을 유지하고 발생률과 호환됩니다. 경우 특히, F는 A는 선형이 동형 ( 대응 가역 ( N + 1) × ( N , 2 개 개의 라인 +1) 행렬) L, M 원 스팬 통해 평면 한 다음,f L, f Mf A에 걸쳐있는 원점을 통과하는 선 이므로 f 는 투영 공간에서도 발생률을 보존합니다. 행렬 곱셈은 선형지도의 구성과 따라서 투 영성을 인코딩합니다.

선형 공간에서 원점을 제거하면 원점을 통해 주어진 선의 모든 점이 서로의 스칼라 배수입니다. 이 사실을 이용하여, 균질화 는 각 투영 점에서는 선형 점을 선택하고 각 투영 변환에서는 가역 행렬을 선택합니다 (이 2D-> 2D 아핀 맵은 3D-> 3D 선형 맵 비디오 와 같이). 대표자들이 행렬-행렬과 행렬-벡터 제품 하에서 닫히고 독특한 투 사물에 의해 주어지고 제공되는 방식. 선형 평면에서 투영 평면구성에 대한 이 설명은 몇 가지 사항을 함께 묶습니다.

따라서 모델 뷰 프로젝션 매트릭스 파이프 라인에서 벡터를 사용하여 투영 공간의 점을 나타내지 만 투영 공간은 벡터 공간이 아니며 사용하는 벡터 공간의 모든 벡터가 점을 나타내는 것은 아닙니다 우리의 기하학의 ( 오른쪽에 아핀 평면의 그림을 보십시오 ). 번역을 원하면 벡터 합계 대신 번역 행렬을 사용합니다. 때때로, 사람들은 특히이 정맥에서 설정을 사용할 때 투영 또는 아핀 포인트 벡터를 호출합니다.


2
+1. 그러나 내 직감은 사용중인 언어를 이해하는 대부분의 사람들이 이미 원래 질문에 대한 답변을 알고 있다는 것이므로 캐주얼 독자를 위해 답변을 조정하는 것이 좋습니다.
Peter

@ 피터 나는 모든 것을 다루기가 어렵다는 것을 알았다. 좀 더 접근하기 쉽도록하고 싶지만 정교하게 처리하는 방법을 모르겠습니다. 그러나 OpenGL을 처음 사용할 때 동종 행렬, 원근 행렬의 의미 및 합산에 의한 변환의 대안으로 변환 행렬이 어떻게 발견되었는지 궁금해했기 때문에 이것이 너무 심오한 것은 아닙니다. 형식주의는 언어이며, 올바른 표현을 제공하며, 개념을 논의하는 방법이 나올 것이라고 생각합니다. 그러나 간결한 것은 매우 불투명하므로 위키 읽기 목록과 비슷합니다.
Loki Clock

몇 가지 링크, 특히 선형 맵으로 더 높은 차원에서 수행되는 아핀 맵 비디오를 추가했습니다. 희망이 도움이 될 것입니다.
Loki Clock

좋은. 더 많은 공감이 필요합니다.
Peter

-1

벡터의 길이 (또는 크기)는 square root of (x*x+y*y+z*z)입니다. 벡터는 항상 원점 에서 벡터에 설명 된 점 <0,0,0> 통과하는 광선으로 간주됩니다.<x,y,z>

이것에 대한 통일 문서는 여기에 있습니다 .


죄송하지만 이건 완전히 잘못되었습니다. 두 점 A와 B가있는 경우 v = BA는 A에서 B로가는 벡터입니다. v는이 경우 원점을 전혀 통과하지 않습니다. 벡터는 점이 아닙니다. 하는 데 사용할 수있는 표현 (위치 벡터 등) 점을, 그러나 그것은 이다 뭔가 다른. 대수 기초를 똑바로 세우십시오.
Polygnome

혼란을 제거하기 위해 답변을 업데이트했지만 Vector3가 Unity에있는 것에 대한 문서를 참조하고 있으며 내 답변은 자신을 포함한 모든 상위 답변과 일치합니다.
Stephan

주의 깊게 연합 설명서를 읽는다면, 당신은 것을 볼 결코 기원이 없기 때문에, 출처를 언급하지 아무것도 어쨌든 벡터의 길이로 할 수 있습니다. (1,1,1)과 (2,3,4) 사이의 벡터는 <1,2,3>이며 sqrt (1 ^ 2 + 2 ^ 2 + 3 ^ 3) = ~ 3.9의 길이를 갖습니다. 두 점 사이의 거리입니다. 그것도 전혀 원점 닿지 않습니다 . 내 대답이 당신과 동의한다고 생각할 수있는 방법이 혼란 스럽 습니다 .
Polygnome
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.