프로그래밍/수학 8

프로그래밍을 위한 수학 - 마찰력 모델링

마찰력(Friction)은 두 물체의 접촉면 사이에서 물체의 운동을 방해하는 힘이다. 그림에서처럼, 썰매와 눈이내린 언덕사이의 마찰력때문에 이 썰매는 언젠가 멈추게 될 것이다. 그러면 프로그래밍에서 이 썰매를 어떻게 멈추게 할 것인가? 이 글에서는 두 물체가 상대적으로 움직이면서 문질러질때 발생하는 운동 마찰력만을 다루려고 한다. 마찰력의 공식은 다음과 같다. 이제 마찰력을 크기와 방향 두 성분으로 나누어 어떻게 계산하면 되는지 살펴볼 것이다. 먼저 방향이다. 마찰력의 방향은 물체에 작용하고 있는 힘과 반대로 작용한다. 공식에서 v는 속도 벡터를 의미하는데, 속도 벡터에 -1을 곱해 방향을 반대로 틀었다. // 벡터의 크기 구하기 function getMagnitude(x, y) { return Math..

프로그래밍을 위한 수학 - 뉴턴의 운동 법칙

움직이는 물체는 위치, 속도, 가속도 벡터를 가진다. 가속도는 속도에 영향을 미치고, 속도는 위치에 영향을 미치는 관계다. 프레임마다 물체가 움직인다는 것은 accX가 가속도, velocityX가 속도라고 하면 위치 (x,y)는 대략적으로 다음과 같이 쓸 수 있다. function move() { this.velocityX += this.accX this.velocityY += this.accY this.x += this.velocityX this.y += this.velocityY } 힘(Force)은 뭘까? 여기서 말하는 힘은 물리학에서 말하는 힘이다. "힘은 질량을 지닌 물체를 가속하는 벡터"이다. 단순히 한 프레임이 지나면 특정 거리만큼 이동하는 물체가 아니라 "자연"스럽게 이동하는 물체를 구현하..

프로그래밍을 위한 수학 - 벡터 기초

벡터 벡터는 “크기와 방향을 모두 가지는 어떤 양”으로 정의된다. 각 프레임마다 객체는 특정 수 픽셀만큼 가로 및 세로로 움직이도록 프로그래밍하게된다. 객체의 새로운 위치는 현 위치에 속도를 적용한 값이 된다. 위 그림을 코드로 옮기면 아래와 같다. // location = (this.x, this.y) this.x += this.vx // horizontal steps this.y += this.vy // vertical steps // new_location = (this.x, this.y) 벡터의 덧셈 두 벡터 u = (5, 2), v = (3, 4)가 있다고하면 u + v = (8, 6)이다. 두 벡터를 더한다는 것은 단순히 벡터의 성분 x와 y 값을 더하는 것이다. 코드상에서 중력을 표현할때도 ..

프로그래밍을 위한 수학 - X축과 직선이 이루는 사이각 구하기

마우스로 찍은 점을 기준으로 야구공이 회전하는 기능을 만들 것이라고 가정 해보자. 그림은...벡터로 되어있지만 어쨌든 검은색 화살표 끝이 가리키는 방향이 유저가 찍은 좌표 x, y라고 하겠다. 야구공은 얼마만큼 회전해야할까? 위에서 본 그림을 우리에게 익숙한 직각 삼각형으로 나타내면 사이각 θ에대해 이렇게 정리할 수 있다. 우리는 V에대해 모르기때문에, 탄젠트 식으로 θ값을 구할 것이다. 양변에 역탄젠트(Arctangent)를 취해주면 식은 θ에 대하여 정리된다. 구글에 Math.atan2를 쳐서 가장 위에나온 javascript atan2 메소드의 설명을 가져와 보았다. The Math. atan2() method returns a numeric value between -π and π represen..

컴퓨터가 2의 보수 표현을 사용하는 이유

# 컴퓨터의 연산장치가 사칙연산을 하는 법 - 덧셈 , 곱셈: 주어진 데이터 표현을 덧셈 or 시프트 연산 - 뺄셈, 나눗셈: 주어진 데이터 표현에 대한 보수(Complement)를 취하여 덧셈, 시프트 연산 컴퓨터는 데이터를 워드(Word)단위로 처리하는데, 운영체제에서 32bit, 64bit로 나누는 것을 보았을 것이다. 이는 바로 워드 사이즈를 가리킨다. 워드의 최상위 비트는 부호비트가된다. 부호비트가 0 = 양수, 1 = 음수다. 나머지 비트들은 데이터 값을 표현하는데 사용한다. 아래는 1워드가 8bit일때를 기준으로 십진수 -53을 비트로 나타낸 것이다. 최상위비트 최하위비트 부호비트 데이터 비트 1 0 1 1 0 1 0 1 # 왜 컴퓨터는 부호화-2의 보수표현을 사용할까? 1워드를 4bit로 ..

프로그래밍을 위한 수학 - 삼각비, 삼각함수 그래프

삼각비 각 A의 크기가 같은 세 직각 삼각형 ABC / ADE / AFG은 모두 닮은 도형이다. 이 닮은 도형들의 대응변 길이의 값은 항상 그 비율이 같게 된다. CB / AB = ED / AD 이런식으로... 이렇게삼각형의 각 변에 대해서 두 변의 길이의 비례값을 구할 수 있는데, 이것이 sin, cos, tan이다. sin A, cos A, tan A를 모두 통틀어 각 A에 대한 삼각비라고 한다. 유치하지만 이렇게 sin, cos, tan을 외웠었지...아무튼 각 삼각비가 어느 변들의 비례를 말하는 것인지만 기억하면 된다. 특수각 30° / 45° / 60°도에대한 삼각비 값이 정리된 표를 심심찮게 볼 수 있지만 아래처럼 계산하기 편한 삼각형을 만들어서 특수각들에 대한 sin, cos, tan 값을 ..

프로그래밍을 위한 수학 - 호도법

180도면 180도지! 왜 각도를 지맘대로 쓰세요?? 일반적으로 우리가 사용하는 0 ~ 360도로 각도를 표현하는 방법은 60분법(Degree)이다. 대부분의 프로그래밍 언어에서는 삼각함수를 다룰때 매개변수로 Radian을 받는다. 이처럼 각도를 Radian으로 표기하는 방법을 호도법이라고 한다. 호도법을 이용하면 °같은 단위표기없이 숫자로만 각도를 표시할 수 있기때문에 계산이 편하다는 이점이 있다. 호도법 호도법은 원의 호의 길이를 이용해 각도를 나타내는 방법이다. 반지름의 길이가 r인 원에서, 길이가 r인 호에대한 중심각의 크기를 a°라고 하면 호의 길이는 중심각의 크기에 정비례 하므로 다음과 같이 계산할 수 있다. 원주율 π는 원의 둘레가 지름의 몇 배인지나타내므로, 원의 둘레는 2r * π이다. ..