sin θ의 값은 단위원의 원둘레 위의 동점 P의 y좌표로 표시되므로 동점 P가 A에서 출발하여 A, P1, P2,…로 회전하며 움직일 때의 y좌표의 변화를 보면 sin θ의 값의 변화를 알 수 있다. 이것을 사인곡선이라 한다. 마찬가지로 y=cos θ의 값의 변화, 즉 동점 P의 x좌표의 변화를 그래프로 나타내면 코사인 곡선이 된다. 또 y=tan θ의 곡선은 다음과 같다. sin θ, cos θ는 θ가 360°씩 변화할 때마다 같은 값을 되풀이하며, tan θ는 θ가 180°씩 변화할 때마다 같은 값을 되풀이한다. 이 사실은 sin θ, cos θ는 360°(2π)를 주기로 하는 주기함수, tan θ는 180°를 주기로 하는 주기함수임을 의미한다. 또, y=cos θ의 그래프는 y=sin θ의 그래프..
floatcheck_x = 좌표1.x - 좌표2.x;// 좌표 1과 좌표 2의 x 값 만큼의 차이floatcheck_y = 좌표1.y - 좌표2.y;// 좌표 1과 좌표 2의 y 값 만큼의 차이intdistance = sqrt((check_x * check_x) + (check_y * check_y));// 피타고라스의 정리에 의해 C^2 = A^2 + B^2 // 만약 구해진 사잇값이 원의 반지름보다 크면 비충돌, 작으면 충돌.// 두 원 사이의 충돌도 구할 수 있음. ex) 사잇값
점과 직선 사이의 거리를 구하는 식은 다음과 같다. 그 중, 직선을 이루는 두 점의 좌표를 아는 상황에서 점과 직선사이의 거리(충돌처리)를 구하는 방법은 다음과 같다. 직선을 이루는 (x1, y1)과 (x2, y2)를 가지고 있다면 직선의 방정식은 다음과 같다. 따라서, 위의 식을 구하여 a, b, c를 구하고, 점과 직선 사이의 거리를 구하는 방정식을 사용하여 최종적으로 거리를 구한다. 그러나, 만약 직선의 x좌표와 점의 x좌표가 같거나, 직선의 y좌표와 점의 y좌표가 같으면 문제가 생긴다.이와 같이 할 경우, 정확한 거리 계산으로 충돌처리를 할 수 없기 때문에 예외 처리를 해주어야 한다. 직선과 점이 충돌하기 위해서는 점은 직선의 x축, y축의 길이 내에 있어야 한다. 값 5는 원활한 충돌을 위한 보..
* 이 방법은 Project Ex에서 사용한 방법입니다. * DirectX에서 랜더링할때 Radian값을 설정해 회전하는 방식으로 했습니다. 공식자체는 다른곳에서 사용해도 무관할듯 합니다. * 이미지의 중심점을 축으로 회전을 시키는 방식입니다. - 이미지의 밑변과 높이를 구한다. 높이 = 나중좌표.y - 이미지의 중심점.y; 밑변 = 나중좌표.x - 이미지의 중심점.x; * 만약 이미지의 밑변이 0이라면 강제적으로 1로 값을 넣어줘야 정확한 회전각이 나옵니다. 회전은 시계방향으로 회전을 하게 됩니다. 따라서 중심을 축으로 왼쪽은 +각도, 오른쪽은 -각도가 나오게 됩니다.(180도 기준) if(밑변 < 0) 회전각 = 아크탄젠트(높이/밑변) * 180도 / 원주율(3.14); else 회전각 = 아크탄젠트..
float _Height = (float)abs(MOUSEINTERFACE.getPoint().y - mCenter.y); // 현재 캐릭터의 좌표와 마우스와의 좌표 사이의 높이를 구해준다. float _Bottom = (float)abs(MOUSEINTERFACE.getPoint().x - mCenter.x); // 현재 캐릭터의 좌표와 마우스와의 좌표 사이의 밑변의 길이를 구해준다. float _R = sqrt((_Height*_Height) + (_Bottom*_Bottom)); // 빗변을 구하는 공식. // 길이 = 속도(이동픽셀) * 시간 => 시간 = 길이 / 이동 픽셀 float _S = _R/3; // 시간을 X또는 Y축과 나누면 그 축으로 시간만큼 얼마나 이동해야 정해진 시간안에 목표에..
cos(), sin() 함수로 간단하게 구할 수 있다. 우리는 현제 원점(x1,y1)과 또다른 점(x2,y2), 그리고 각도θ를 알 고 있다. 회전운동을 하기 위한 점을 (x3,y3)라 정하면, 먼저 (x1,y1), (x2,y2)의 거리를 구한다.. bottom = (x2 - x1); height = (y2 - y1); 위에서 구한 길이를 토대로, (x3,y3)의 값을 구해준다. x3 = cos(θ) * bottom - sin(θ) * height; y3 = sin(θ) * bottom + cos(θ) * height; 이렇게 구한 (x3,y3)좌표를 계속 구해(x1,y1)과 지속적으로 더하면, x1 += x3; y1 += y3; 최종적으로 저런 형태의 식이 나오며, 직선은 회전운동을 하게 된다.
#include #include #include using namespace std; class cMagicSquare{public:cMagicSquare(int _dim);~cMagicSquare(); private:int**mP;intmDim; public:voidsetDim(int _dim);voidsetMagic(); intgetDim(); voidshowMagic();}; cMagicSquare::cMagicSquare(int _dim){mDim= _dim; mP= new int*[_dim];for( int i = 0; i < _dim; i++ ){mP[i]= new int[_dim];}} void cMagicSquare::setDim(int _dim){mDim= _dim;} void cMagi..