Nomalrize 단위 벡터와 내적의 의미

Unity3D 2013. 7. 26. 23:13
반응형

1. 단위 벡터
   길이가 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
: