오일러 각도 (Euler Angle)
오일러 각도: 3개의 값 만으로 모든 3차원 회전을 표현하는 방법. Pitch - 고개를 끄덕거릴 때 변하는 값 Yaw - 고개를 좌우로 흔들 때 변하는 값 Roll - 목을 스트레칭 할 때 머리를 어깨 쪽으로 기울일 때 변하는 값 (P,Y,R) 순으로 쓴다. 오일러 각도를 3차원 벡터로 변환하는 법: (x, y, z) = (cos Y cos P, sin Y cos P, sin P) 참고:
오일러 각도: 3개의 값 만으로 모든 3차원 회전을 표현하는 방법. Pitch - 고개를 끄덕거릴 때 변하는 값 Yaw - 고개를 좌우로 흔들 때 변하는 값 Roll - 목을 스트레칭 할 때 머리를 어깨 쪽으로 기울일 때 변하는 값 (P,Y,R) 순으로 쓴다. 오일러 각도를 3차원 벡터로 변환하는 법: (x, y, z) = (cos Y cos P, sin Y cos P, sin P) 참고:
*interpolate (약어 lerp) 구현방법1. Approach 함수 Approach(G, C, dt) if G - C > dt: return C + dt if G - C < -dt: return C - dt else: return G 매 게임 프레임마다 Approach()의 결과값을 다시 Approach의 C값에 집어넣는다. 그러면 G에 dt씩 근접해간다. (dt를 더할 수도 뺄 수도 있다) 실제 사례에 적용 - WASD로 이동할 때 그냥 바로 캐릭터의 velocity를 상수로 바꿔버리면 움직임이 부자연스럽다. 따라서 WASD를 눌렀을 때 VelocityGoal을 상수로 설정하고, 매 프레임(Update())마다 Approach(캐릭터.velocity, 캐릭터.velocityGoal, dt)를 실..
3요소 캡슐화 (Encapsulation) - 함수와 변수를 클래스라는 단위로 묶는다. 상속 (Inheritance) - 오버라이딩(함수 재정의) 등을 사용해 부모의 특성과 기능을 물려받는 것. 다형성 (Polymorphism) - 하나의 함수, 변수가 상황에 따라 다르게 해석될 수 있음. 5원칙 (SOLID) SRP - 단일 책임 원칙 하나의 클래스는 하나의 책임만을 져야 한다. OCP - 개방-폐쇄 원칙 클래스는 확장이 쉽게 제작되어야 하며 동시에 수정에는 폐쇄적이어야 한다. LSP - 리스코프 치환 원칙 자식 클래스는 언제나 부모 클래스를 대체할 수 있어야 한다 ISP - 인터페이스 분리 원칙 클라이언트는 자신이 사용하지 않는 메소드와 의존관계를 맺어서는 안된다. -> 만약 인터페이스가 너무 다양한..
#include #include #include using namespace std; vector maxDist; void getMaxDist(int row, int col) { maxDist[row][col] = max(maxDist[row][col] + maxDist[row-1][col], maxDist[row][col] + maxDist[row-1][col-1]); return; } int solution(vector triangle) { int answer = 0; for (int i = 0; i < triangle.size(); ++i) { vector row; row.push_back(0); for (int j = 0; j < triangle[i].size(); ++j) { row.push_b..
kindtis.tistory.com/574 STL Queue 초기화 ( STL Queue Clear ) STL의 Queue 컨테이너 경우 다른 컨테이너와 다르게 clear 멤버 변수가 없습니다. 그래서 이를 초기화 해주려고 하면, 아래와 같이 일일히 루프를 돌며 pop을 해주거나하죠 while (!mQueue.empty()) { mQueue.po kindtis.tistory.com 요약: clear()가 없으므로 내의 swap()사용. e.g. queue origin; queue newQueue; swap(origin, newQueue); 이후 origin을 호출하면 newQueue가 불려짐.
#include #include #include #include #include using namespace std; vector solution(vector progresses, vector speeds) { vector answer; queue days; days.push(ceil((100 - progresses[0]) / (float)speeds[0])); for (int i = 1; i < progresses.size(); ++i) { int curr = ceil((100 - progresses[i]) / (float)speeds[i]); if (curr
ceil -> 4.2를 5로 floor -> 4.2를 4로 round -> 4.2를 4로, 4.5를 5로
컴포넌트->함수.AddDynamic(this, 함수 레퍼런스); Delegate를 사용해 컴포넌트가 overlap되는 순간 특정 함수를 호출함. 다양한 콜리전 이벤트, AI의 적 발견 시 행동양식 지정 등에 사용됨. 만약 Constructor에서 AddDynamic을 했는데 제대로 인식이 안 될 경우 BeginPlay로 위치를 옮겨볼 것. 주의) 레퍼런스로 전달할 함수는 반드시 UFUNCTION매크로를 달고 있어야함. SetupAttachment 컴포넌트 생성 후에는 SetupAttachment(붙이고 싶은 상위 컴포넌트) 를 해줄 것. DecalComponent 데칼을 붙인 것 같이 평면 상에서 스프레이처럼 그래픽을 렌더링해주는 컴포넌트. 언리얼의 AI API 언리얼의 AI API를 사용하려면 별도의 ..
iterator를 사용한다. 이 때 set.end()가 마지막 원소 다음을 가리킨다는 점에 유의하자. 따라서 for (std::set::iterator i = set.begin(); i != set.end(); ++i) 처럼 사용하면 된다. (auto가 더 편하긴 하다)
OOP 1. Java에서 8가지의 Primitive type 제외한 모든 type은 Reference type(혹은 User-defined type)이다. String은 Primitive type이 아니지만 유저 편의를 위해 String literal (ex."ABCD", "홍길동")을 미리 정의해두어 다음과 같은 문법이 가능하다. String s = "HAHAHA"; 엄밀히 따지면 String은 클래스이다. 2. Java는 C와 달리 boolean true가 1, false가 0을 의미하지 않는다. 심지어 boolean이 1비트가 아닐 수도 있다. (기본적으로는 1비트이지만 JVM의 종류에 따라 1비트 말고 다른 크기를 할당할 수도 있다.) 왜 그러한가? 프로그램이 메모리에서 CPU에 데이터를 전달할 ..
yabmoons.tistory.com/99 [ 순열과 조합 구현 ] - 재귀를 통한 구현(1 - 조합) (C++) 브루트포스 알고리즘에서 가장 많이 사용되는 방법이 순열과 조합등으로 모든 경우의 수를 모두 계산해본 뒤에 원하는 결과 값을 찾는 방식이다. 이 글에서는, 순열과 조합을 STL을 사용하지 않 yabmoons.tistory.com
shlee0882.tistory.com/118 탐욕 알고리즘 1. 대학교 수업시간표 짜기 문제 대학교에서 수강신청을 할 예정인데 최대한 많은 과목을 듣고 싶다. 하지만 시간이 한정적이고 시간이 겹치는 시간대에 동시에 두과목을 들을순 없다. 시간이 shlee0882.tistory.com