3냥 집사이면서 게임 개발자입니다.
극좌표계 (실습) 본문
// 렌더링 로직을 담당하는 함수
void SoftRenderer::Render2D()
{
...
float sin = 0.f, cos = 0.f;
Math::GetSinCos(sin, cos, currentDegree);
// 현재 화면의 크기로부터 길이를 비교할 기준양 정하기
static float maxLength = Vector2(_ScreenSize.X, _ScreenSize.Y).Size() * 0.5f;
// 원을 구성하는 점 그리기
HSVColor hsv(0.f, 1.f, 0.85f);
for (auto const& v : squares)
{
// 극좌표계로 변경
Vector2 polarV = v.ToPolarCoordinate();
// 극좌표계의 각 정보로부터 색상을 결정한다.
if (polarV.Y < 0.f)
{
polarV.Y += Math::TwoPI;
}
hsv.H = polarV.Y / Math::TwoPI;
// 극좌표계의 크기 정보로부터 회전량을 결정한다.
float ratio = polarV.X / maxLength;
float weight = Math::Lerp(1.f, 5.f, ratio);
// 극좌표계를 사용해 회전을 부여한다.
polarV.Y += Math::Deg2Rad(currentDegree) * weight;
// 최종 값을 데카르트 좌표계로 변환한다.
Vector2 cartesianV = polarV.ToCartesianCoordinate();
r.DrawPoint(cartesianV, hsv.ToLinearColor());
}
// 현재 각도를 화면에 출력
r.PushStatisticText(std::string("Degree : ") + std::to_string(currentDegree));
}
정사각형의 형태를 가지는 벡터의 묶음을 Home키를 눌렀을 때 모든 벡터에 회전시키는 작업을 수행한다.
좀 더 과장된 효과를 보여주기 위해서 중심에서 멀어지는 점들에 더 많은 회전량을 부여한다.
'게임 수학' 카테고리의 다른 글
극좌표계 (0) | 2025.01.03 |
---|---|
삼각 함수의 역함수 (0) | 2025.01.03 |
삼각함수를 활용한 물체의 회전 (실습) (0) | 2024.11.29 |
삼각 함수를 활용한 물체의 회전(개념) (0) | 2024.11.29 |
삼각함수(실습) (0) | 2024.11.29 |