Algorithm with C
-
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값만 구하면 된다. 구현에서 직선은 즉, 고정적이다. 즉, 직선은 시작점과 끝점을 ..
-
LCS(최장 공통 부분 수열 - longest common subsequence) DPAlgorithm with C/Dynamic Programming 2020. 9. 28. 16:35
LCS가 처음이라면 아래에서 우선 재귀적 방법과 메모이제이션 방법을 익히고 오자. designatedroom87.tistory.com/117 LCS(최장 공통 부분 수열 - longest common subsequence) 재귀적 방법 & 중복제거의 메모이제이션 발췌 문헌 ko.wikipedia.org/wiki/%EC%B5%9C%EC%9E%A5_%EA%B3%B5%ED%86%B5_%EB%B6%80%EB%B6%84_%EC%88%98%EC%97%B4 최장 공통 부분 수열 - 위키백과, 우리 모두의 백과사전 위키백과, 우.. designatedroom87.tistory.com 점화식은 아래와 같이 4가지 경우가 있다고 하였다. 1. 두 문자열의 맨 마지막 원소가 같은 원소로 끝나는 경우(LCS에 포함이 되는 경..
-
LCS(최장 공통 부분 수열 - longest common subsequence) 재귀적 방법 & 중복제거의 메모이제이션Algorithm with C/DFS 2020. 9. 27. 23:47
발췌 문헌 ko.wikipedia.org/wiki/%EC%B5%9C%EC%9E%A5_%EA%B3%B5%ED%86%B5_%EB%B6%80%EB%B6%84_%EC%88%98%EC%97%B4 최장 공통 부분 수열 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 최장 공통 부분수열 문제는 LCS라고도 불린다. 이는 주어진 여러 개의 수열 모두의 부분수열이 되는 수열들 중에 가장 긴 것을 찾는 문제다.(종종 단 두 개중 하� ko.wikipedia.org LCS 문제는 최적의 부분구조를 가진다. 이 문제는 더 작은, "부분문제"로 쪼개질 수 있고, 이것은 반복해서 자명한 부분문제가 될 때까지 더 간단한 부분문제로 쪼개질 수 있다. LCS는 또한 겹치는 부분문제를 가진다. 더 높은 부분문제에 ..
-
달팽이 배열Algorithm with C/ETC 2020. 9. 21. 17:41
문제 아래와 같이 데이터를 저장하도록 프로그래밍 하자. 구현 프로그램 실행결과 소스 파일 여기까지만 해도 괜찮지만, 다이나믹한 출력을 위해 아래의 두 함수를 추가해보자. Gotoxy함수에서 COORD 자료형을 쓰기위해서는 Windows.h를 include 해야한다. 콘솔 화면 창의 좌측 상단이 (0,0)이고 우측으로 갈수록 x좌표값이 커지고 아래로 갈수록 y좌표값이 커진다. 위의 두 함수는 이차원 배열에 데이터를 저장할 때 호출하도록 한다. 위의 함수에서 4를 곱하는 부분이 있는데, 열의 간격을 넓히기 위함이다. 열의 간격을 넓히지 않으면 숫자와 숫자 사이가 붙기 때문이다. 적당한 수를 곱하거나 더해서 간격을 준 것이다. 프로그램 실행결과 소스 파일 조금 다른 방식