Algorithm with C/Math
-
API를 활용한 파티고라스의 정리를 이용한 거리 구하기Algorithm with C/Math 2020. 10. 10. 12:30
[그림출처 : 네이버지식백과] 게임에서, 플레이어와 에너미와의 거리를 구하기 위해서, 위의 피타고라스 정리를 이용해서 거리를 구할 수 있다. 위의 내용을 가지고 API로 구현해보자. 먼저 변수부터 보자. 변수들은 모두 전역 변수이다. x,y가 플레이어의 좌표이며, x_2와 y_2는 에너미의 좌표이다. 우리가 구할 것은 플레이어와 에너미의 거리이다. 플레이어와 에너미의 거리를 담는 변수는 Distance이다. sqrtf함수는 루트함수이다. 점을 딱히 표현할 방법이 없어서, 원으로 표기를 한다. (x,y)는 원의 좌측상단점이며, (x+diameter, y+diameter) 는 원의 우측하단점이 된다. 아래의 함수는 각 방향 키의 입력에 따라 좌표값을 업데이트 한다. 아래에서 아래 방향키가 눌리면 y값이 작아..
-
행렬의 응용 Scale & RotationAlgorithm with C/Math 2020. 10. 7. 19:20
아래의 내용의 연장선이다. 아래의 내용을 먼저 보고 오는 것도 좋은 선택이다. 아래에서 구현한 파일들을 가지고 구현한다. designatedroom87.tistory.com/133?category=887656 행렬의 기본 연산과 행렬식,역행렬, 단위행렬 행렬은 과연 어디에 적용되는가를 알고 싶을 것이다. Unity에서 Transform이라는 Component가 있는데, 이 Transform에서는 전부 행렬로 처리를 한다. Transform에는 Position, Rotation, Scale이 있는데, 이 곳에.. designatedroom87.tistory.com 그림으로 Scale 개념 익히기. 기존의 직사각형 A를 우리가 2배 늘리고 싶다고 가정하자. 그러면, 직사각형 4개의 점의 좌표에 각 각 2를 ..
-
행렬의 기본 연산과 행렬식,역행렬, 단위행렬Algorithm with C/Math 2020. 10. 4. 20:53
행렬은 과연 어디에 적용되는가를 알고 싶을 것이다. Unity에서 Transform이라는 Component가 있는데, 이 Transform에서는 전부 행렬로 처리를 한다. Transform에는 Position, Rotation, Scale이 있는데, 이 곳에서 모두 행렬을 이용해 Object들의 좌표를 움직이게 한다든지, 회전을 시키고, 크기를 늘렸다 줄였다를 할 수 있다. 행렬을 아래와 같이 구조체로 정의하도록 하자. 행렬의 덧셈, 뺄셈, 곱셈 연산 위의 2X2행렬 곱셈의 일반화를 해보자. 행렬 곱셈의 주의 해야할 사항. 행렬식 단위 행렬(2by2 행렬임을 가정.) 역행렬 좀 더 엄밀히 수학적으로 말하면, 주어진 행렬의 역행렬이 존재하면 행렬의 행렬식은 0이 되지 않고 이와는 반대로 행렬의 행렬식이 0..
-
API를 활용한 반사벡터 구현Algorithm with C/Math 2020. 10. 3. 18:22
먼저, 아래의 영상을 보자. 이것이 우리가 만들 것이다. 위의 내용에 필요한 부분이 바로 반사벡터이다. 이에 대해 알아보자. 위의 그림과 같이 MoveVec이 있다고 가정하자. 공이 왼쪽 벽을 향해 부딪힌다는 경우. ( MoveVec은 우리는 알고 있다고 가정 ) 그러면 공의 반사벡터를 구할 수 있다. 먼저, 약간의 해답을 제시하면 공의 이동벡터인 MoveVec의 x방향과 y방향을 이용하면 구 할 수 있다. 그림을 좀 더 자세히 그려보면 이 된다. 위의 그림을 한 번만 더 자세히 그리면 아래와 같이 나타낼 수 있다. 이번에 공이 위쪽 벽에 부딪힌 경우에 대해서 간략적으로 그리면 즉, 위의 규칙을 통해서 다음과 같은 결론을 내릴수 있다. 공이 왼쪽과 오른쪽 벽에 충돌했다고 하면 공의 이동벡터는 ( -1* ..
-
API활용으로 공의 튀어오름을 구현(포물선 운동)Algorithm with C/Math 2020. 10. 3. 17:46
그래프와 공식 출처 http://terms.naver.com/entry.nhn?docId=941198&cid=47338&categoryId=47338 포물선 운동 수평면과 θ의 각으로 던져 올린 물체의 운동을 분석해 보면 수평 방향으로는 등속도 운동을 하고 연직 방향으로는 연직 위로 던져 올린 물체의 운동과 같음을 알 수 있다. ① 포물선의 식 : ② �� terms.naver.com 위 공식1번 포물선의 식을 다시 쓰면 아래와 같다. 변수들부터 정의하자. 아래의 변수들은 모두 전역 변수들이다. 구현한 세 함수들 위의 함수에서 공이 착지를 할 때마다 속도를 줄이는데, 이 줄어든 속도는 절대 0이하로 떨어지지 않기 때문에 (로직 상 속도를 25%씩 감소 시키는 방향으로 만들었기 때문) 적당히 작은 값 이하..
-
API를 활용한 이차함수를 이용해 점프 기능 만들기Algorithm with C/Math 2020. 10. 2. 17:17
a가 양수냐, 음수냐에 따라서 이차함수의 그래프의 개형이 달라진다. 그림 출처 : terms.naver.com/entry.nhn?docId=945470&cid=47324&categoryId=47324 이차함수의 그래프 [ 1. y = ax2의 그래프(a ≠ 0)] ⑴ 꼭짓점은 원점 (0, 0) ⑵ 대칭축: x = 0(y축) ⑶ a > 0이면 아래로 볼록 a < 0이면 위로 볼록 ⑷ |a|가 클수록 y축에 가깝다(폭이 좁다). [ 2. y = a(x - m)2 + n의 그래프] y = ax2의 terms.naver.com 글의 제목에서 말했듯이 이차함수를 게임에서 접목하는 부분은 점프를 만드는데 활용할 수 있다. 위의 식보다는 간편하게 위와 같이 쓰도록 하자. 위 식의 그래프를 그려보면, 아래와 같다. 보..
-
API를 활용한 점과 직선 사이의 거리Algorithm with C/Math 2020. 10. 1. 20:46
점과 직선 사이의 거리를 증명부터 해보자. 아래와 같이 직선과 직선 외부의 점 P가 있다고 하자. 점과 직선 사이의 거리를 증명해보자. 직선 PH의 기울기와 직선 m의 기울기를 각 각 구해보자. 두 직선의 기울기의 곱이 -1이 된다는 사실을 이용해서 식을 쓰면 점과 직선 사이의 거리를 구하는 함수 구현 프로그램상에서 구현하기 위해서 기존의 직선의 방정식에서 다음과 같은 방정식을 사용한다. y = ax + r 즉, 이항을 해서 다음의 형태로 바꾸어 주도록 하자. 즉, 직선을 일반형으로 표현하자. ax - y + r = 0 위의 공식에 a는 a를 대입하고, b대신 -1을 대입하고 c대신 r을 대입하면 된다. 즉, 기울기a와 r값만 구하면 된다. 구현에서 직선은 즉, 고정적이다. 즉, 직선은 시작점과 끝점을 ..
-
Graham ScanAlgorithm with C/Math 2020. 9. 11. 20:22
1. 정의 Graham Scan은 평면 상에서 유한한 점들의 볼록 껍질(Convex hull)을 찾는 방법이다. 자세한 사항은 아래를 참고 하자. ko.wikipedia.org/wiki/%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%97%84_%EC%8A%A4%EC%BA%94 그레이엄 스캔 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 2차원 볼록 껍질을 찾는 그레이엄 스캔의 예시 그레이엄의 스캔(Graham Scan)은 평면상에서 유한한 점들의 볼록 껍질을 찾는 방법으로, 시간 복잡도는 O(n log n)이�� ko.wikipedia.org 2. 문제 8개의 좌표를 순서대로 입력받는다. (3,1) (1 3) (2 2) (3 2) (1 2) (2 3) (1 1) (2 1)..