Nomalrize 단위 벡터와 내적의 의미
Unity3D 2013. 7. 26. 23:131. 단위 벡터
길이가 1인 벡터를 말한다. 주로 벡터의 방향을 나타내기 위해 사용합니다.
(x,y,z) 벡터의 단위 벡터는
length = sqrt(x^2+ y^2+ z^2)
Normalrize Vector = (x/length, y/length, z/length) 가 됩니다.
위의 x,y,z 값들은 1이하로 결과값이 나올겁니다. 즉 전체 길이에 대한 현재 축의 길이를 말하는 거겠죠.
좌표계를 그려놓고 삼각함수를 생각한다면 이해가 갈것입니다.
2d 에서는 x^2 + y^2 = z^2 이죠. 이걸 이해한다면 위 공식이 어떻게 나왔는지 감이 올겁니다.
vec.Normalize() : 현재 벡터값을 단위벡터 값으로 변경해 버립니다.
Vector3 vec2 = vec.normalized(); : 기존 값은 유지한채로 단위벡터 를 리턴한다.
2. 벡터의 내적(Dot Product)
두벡터 사이의 길이비를 나타낸다.
v1 = { a1,a2,a3 }, v2 = {b1,b2,b3}
v1*v2 = {a1*b1, a2*b2, a3*b3} => |v2|* |v1|cos@
: 교환 법칙 성립한다.
loat dot = Vector3.Dot ( v1, v2 );
float angle = Math.Acos ( dot );
=>두 벡터가 이루는 각을 알지 못하고 각 벡터 좌표값을 알고 있을때, 이 Dot한 값이 양수면
그 각은 0~90, 270 ~360도 사이에 있다.
이 dot 값은 Cos@ 곡선을 따른다.
예> 나의 위치(A), 상대방 위치(B)를 알고 있다면, 이 AB의 내적을 구한다.
이값이 양수면 상대방은 전면에 있고 ( 0-90도, 270-360도)
음수면 상대방은 후면에 있다. (90-270)
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public Transform other; void Update() { if (other) { Vector3 forward = transform.TransformDirection(Vector3.forward); Vector3 toOther = other.position - transform.position; if (Vector3.Dot(forward, toOther) < 0) print("The other transform is behind me!"); } } }
http://www.devkorea.co.kr/reference/Documentation/ScriptReference/Transform.TransformDirection.html
'Unity3D' 카테고리의 다른 글
[스크랩] UNITY 비주얼스튜디오 C# 연동하기 (0) | 2013.08.01 |
---|---|
Unity Korea 2013 3Session - Unity VS 사용방법 소개 (0) | 2013.08.01 |
유니티 메모리 관리의 이해 (0) | 2013.07.25 |
Unity3d 최적화 (0) | 2013.06.24 |
무료서체 (0) | 2013.05.15 |