2018년 9월 27일 목요일

Vector 활용

Normalize ( 정규화? 규격화? )

 (1, 2, 3) 이라는 3차원 백터를 노말라이즈 하는 과정
 1. 백터의 힘을 구한다
  vectorForce = sqrt(1*1 + 2*2 + 3*3)
  vectorForce = 3.74…. 정도가 나온다. 이것이 백터가 가진 힘(길이)!
 2. 이제 이 힘으로 각 원소를 나누어준다
  x = 1 / vectorForce
  y = 2 / vectorForce 
  z = 3 / vectorForce 
해서 나오는 (x, y, z) 가 노말라이즈 된 백터이다
(0.267, 0.534, 0.801) 라는 백터가 나온다
이 백터의 힘을 구해본다면 그 힘(길이)이 1이 나올 것
방향은 유지하고 힘(길이)을 1로 맞추는 과정이 Normalize

Dot Product ( 내적 )

두 백터를 가지고 계산하여 나오는 실수 값
내적의 활용도는 무궁무진, 그 이유는?!

1. 내적의 계산 방법
v1 = (a, b, c)
v2 = (x, y, z)
내적의 표기는 ->  v1 · v2 ( 가운데 점이다. 그래서 dot product )
계산법 (  각 원소를 같은 위치의 원소들과 곱하고 그것들을 모두 더한다 )
 1) v1 · v2 = a*x + b*y + c*z
 2) v1 · v2 = v1Force *  v2Force * cos(theta) 
2) 번 식이 상당히 중요함. 왜냐하면  cos 과 theta 개념이 탑재 되어 있기 때문
위 식에 나온  theta 는 v1 과 v2 의 사이각을 의미한다.
그렇다 그 사이각의 변화에 따라 내적값이 변경 된다.
아 내적은 두 백터의 관계가 수치로 표현 되는 것이구나!!
그렇다면 이 관계? 로 부터 어떤 수치가 나오는걸까?
이를 알아보기 위해 우선 2번 식을 간소화 해보자
위에서 언급한 Normalize 를 이용하면 v1Force 와 v2Force 를
1로 만들 수 있다는 것에 착안한다.
v1 과 v2 의 내적을 구하기 전에 각각을 normalize 하고 2번 식을 구성해보자
그러면  v1 · v2 = 1 *  1 * cos(theta) 이런 식으로 나오게 되고
결국은  v1 · v2 = cos(theta) 이렇게 되는것이다.
실제로 내적은 대부분 노말라이즈된 백터를 가지고 수행하는 것이 원칙이다.
결국 내적의 값은 코사인 함수에 그 사이각을 라디안 으로 대입하면 나오는
값이다. 

이제 코사인 곡선을 그려보자




image

이 그래프를 잘 보면
cos() 의 괄호 안에 들어가는 라디안으로 표기 각도값에 따라
cos()  의 값이 1 과 -1 사이를 오르락 내리락 한다.

그렇다 내적은 -1 과 1 사이 값을 가진다.
사이각이 0, 즉 같은 방향의 백터들은 내적값이 1이고
사이각이 180도, 즉 반대 방향인 백터들의 내적은 -1
사이각이 직각을 이루는 경우는 0 이다.

내적 값은 알았고 반대로 theta 값 즉 두 백터의 사이각을 구하려면
어떻게 해야 할까
v1 · v2 = cos(theta) 을 바탕으로 양변에 acos를 곱해준다
acos( v1 · v2 ) = theta 가 된다

참고로 각도와 라디안 변화식은

180 가  π  라는 것을 기억한다면
1° = π / 180°
180° ->    180°  x  (π / 180) ->  π
0.5 rad -> 0.5 x (180 / π) -> 90 / π

Cross Product ( 외적 )

외적의 경우 계산후 실수값이 아닌 
두 백터에 모두 수직인 백터가 나온다 

1. 외적의 계산 방법
v1 = (a, b, c)
v2 = (x, y, z)
외적의 표기는 ->  v1 x v2 ( 가운데 x이다. 그래서 cross product )


활용법

1. 점과 직선의 최단거리








































2.점과 선분의 최단거리








































3.











2018년 6월 24일 일요일

C# 자료구조


[] 배열 : 
  값으로 검색할 필요 없는 경우( 해야한다면 HashTable 이 빠르다 )
  검색시 키가 숫자인 경우 ( 키가 숫자가 아니면 Dictionary 가 빠르다 )
  맨 앞 또는 맨 뒤만 접근 하는 경우 Queue, Stack 이 빠르다


동적배열( ArrayList, List<T> ) :
           ArrayList 는 자료형에 상관 없이 아무거나 넣는 구조
           List 는 특정 자료형을 선택하여 같은 종류의 것암 넣는 구조
  배열의 크기를 확정하지 않고 유동적으로 써야 할 때
 
  검색 코드 ->
  Transform t = myList.Find( delegate(Transform tm) { return tm.name == "name"; } );



Linked List :
           노드가 다음/이전 노드의 포인터를 갖고 있다
  삽입/삭제 빠르다( 위의 표 검색 값은 O(n)으로 표기 되었지만 O(1)임 )
  검색은 전체 검색을 함 비효율


Dictionary :
           키값으로 문자도 쓸수 있고 삽입, 삭제, 검색 골고루 효율적
  단점 찾아봐야함


HashTable :
           Generic 형식이 아닌 Object를 그대로 저장하는 방식
           C#에서는 형 변환에 자원을 많이 소비하기 때문에 Dictionary가 속도면에서 효율적

           
HashSet : 
           Key-Value 구조가 아니라 유니크한 값(Value)로만 이루어져 있음
           
           



















2018년 6월 21일 목요일

C언어 출력타입 %d %s

%d: 10진수(정수형)
%i: %d

%f: 실수형
%F: 무한수 표현

%e: 지수형

%o: 8진수

%x: 16진수 소문자
%X: 16진수 대문자

%u: 부호없는 10진수

%g: 실수형, 크기 작으면 %f 크면 %e

%p: 포인터의 주소

%c: 문자
%C: %c

%s: 문자열

%n: ?

2018년 5월 15일 화요일

프레젠테이션

영어 발표의 시작

1. 시전 끌기 (이목 집중)
   Can I get attention please
   Perhaps we should begin?
   Let's get start
   If we can start?
   Nice to meet you


2. 자기 소개
   name , rule
   i am charge of ...
   For those of you who don't know me, My name is Brandon
3. 프레젠테이션의 목적
   I'd like to present ...
   I'd like discuss
   What i want to do is to show you how ...
   I gonna talking about 

4. 질문에 대한 코멘트( 중간중간 or 끝나고 )
   If you have any question, feel free to raise your hand
   Perhaps we can leave any questions you have until the end.
   There will be a plenty of time for questions at the end

2018년 5월 7일 월요일

Windows Game Development ( UWP: Universal Window Platform)

Hololens 작업 정리

PC와 Hololens의 개발자모드, 디바이스포탈 활성화

시스템 설정으로 이동하여 '업데이트 및 보안'을 선택하세요. 다음으로 '개발자용'을 선택합니다. 여기서 '개발자 모드'를 선택하여 활성화하면 됩니다.



PC의 개발자 버전이 제대로 적용 되지 않아 디바이스포털 활성화 안된다면 USB를 사용
다만 홀로렌즈 id, pw 값을 모를경우 재설정 하여 진행해야 함


사용 메뉴얼
1. 참조 : 유니티빌드 + vs deploy( 빌드관련 )
2. 참조 : 좀 더 개발적 튜토리얼


====================================================
hololens에서의 vuforia 개발 튜토리얼
기본 튜토리얼 : 링크

====================================================
새 프로젝트에 순서 복기
1. 프로젝트 생성 (베이스를 기본 생성된 프로젝트로 한다)
   company name, product name 은 된 것으로 간주
2. 기존 메인카메라 삭제 및 ARCamera 추가 ( vuforia 패키지 따라 설치 됨 )
3. ImageTarget 추가, child object 추가
4. BuildSettings / SwitchPlaform : Universal Windows Platform
   BuildSettings / Target Device : Hololens
5. PlayerSettings / XR Settings / Virtual Reality Supported check
   PlayerSettings / XR Settings / Vuforia Augmented Reality Supported check
6. PlayerSettings / Publishing Settings / Capabilities
   InternetClient check
   WebCam check
   Microphone check

7. PlayerSettings / Other Settings / Configuration / Scripting Backend
   IL2CPP 라면 .NET 으로 바꿈
 

8. Resources 의 VuforiaConfiguration 내용 수정
   Digital Eyewear / Device Type -> Digital Eyewear
   Digital Eyewear / Device Config -> HoloLens
 

9. ImageTarget 속성변경
   Image Target Behaviour / Advanced / Extended Tracking -> check

x. 혹시나 ImageTarget 에 Custom Turn Off Behaviour 가 컴퍼넌트로 있다면
   Turn Off Rendering 을 Play Mode And Device 로 해준다.

 
111. visual studio 빌드 세팅
   x86 / Device






====================================================
참고해야할 사항들
참조






unity 2017 + vuforia

참조

unity 설치시

Vuforia Game Objects

Vuforia will be visible in the Unity Game Object menu and also in Build Settings and Player Settings.
Vuforia Image

Activate Vuforia in your project
You must activate Vuforia in your project before you will be able to build a Vuforia app, or use Vuforia in Play Mode. Go to Player Settings to activate Vuforia under the "XR Settings" section



Accessing Vuforia features in Unity
After activating Vuforia, you can add features of the Vuforia SDK to you project from the Unity GameObject Menu.
Start by adding an ARCamera. This is a special camera type that supports augmented reality apps for both handheld devices and digital eyewear. 
Steps:
  1. Add an ARCamera
  2. Open the global Vuforia Configuration Inspector
  3. Activate the target databases
  4. Add targets to your scene





Print Physical Targets

This is a good time to print some targets to work with. You can find these in /Editor/Vuforia/ForPrint. We’ve provided a complete set of high-resolution target prints to get you started.
Vuforia Image
Printable target PDFs can be found in /Editor/Vuforia/ForPrint


player settings / Publishing Settings / Capabilities

check WebCam, Microphone, InternetClient