sin(사인) 함수는 삼각 함수의 하나로, 특정 각도에 대한 y축 값(단위 원 상에서)을 반환한다. 이 함수는 주기적이고 부드러운 곡선(사인파)을 만들어내며, 각도를 입력으로 받아 -1에서 1 사이의 값을 출력한다.
수학적 정의
sin(θ)는 단위 원에서 각도 θ에 해당하는 점의 y좌표를 의미한다.단위 변환:
- 라디안 → 도(degree):
라디안 = 도 × π / 180- 도 → 라디안:
도 = 라디안 × 180 / π
언리얼 엔진에서는 FMath::Sin(C++)를 사용해서 사인 값을 계산할 수 있다.
#include "Math/UnrealMathUtility.h"
float Radian = PI / 2; // 90도 (라디안)
float SinValue = FMath::Sin(Radian); // 결과: 1.0
1) 출력 값의 범위
sin(0) = 0, sin(π/2) = 1, sin(π) = 0, sin(3π/2) = -12) 주기성
sin 함수는 2π(360도)마다 값을 반복한다.3) 부드러운 곡선
1) 주기적인 움직임
sin 함수는 주기적으로 값을 변화시키므로, 캐릭터의 점프 애니메이션이나 오브젝트의 상하 이동 등 반복적인 움직임을 구현할 수 있다.
float Time = GetWorld()->GetTimeSeconds(); // 게임 시간
float Amplitude = 50.0f; // 진폭
float Frequency = 1.0f; // 주파수
FVector NewLocation = StartLocation;
NewLocation.Z += Amplitude * FMath::Sin(Frequency * Time);
SetActorLocation(NewLocation);
오브젝트가 Z축을 따라 부드럽게 상하로 움직인다.
2) 파동 효과
물결 모양의 파동을 구현할 때도 sin 함수가 유용하다. 예를 들어, 물리적인 파동이나 시각적 이펙트를 구현할 때 사용할 수 있다.
float Time = GetWorld()->GetTimeSeconds();
float Amplitude = 20.0f; // 파동의 높이
float Frequency = 2.0f; // 파동의 속도
for (int32 i = 0; i < NumberOfPoints; ++i)
{
float X = i * 50.0f; // 점의 X 위치
float Z = Amplitude * FMath::Sin(Frequency * Time + X); // 파동 계산
Points[i].Z = Z;
}
X축을 따라 사인파 모양의 물결이 생성된다.
3) 색상 변화
sin 함수는 0~1 사이로 변환하면, 색상이나 밝기의 부드러운 변화를 구현할 수 있다.
float Time = GetWorld()->GetTimeSeconds();
float Brightness = (FMath::Sin(Time) + 1) / 2.0f; // 0~1로 변환
FLinearColor Color = FLinearColor::LerpUsingHSV(FLinearColor::Red, FLinearColor::Blue, Brightness);
MyMaterialInstance->SetVectorParameterValue("BaseColor", Color);
빨간색에서 파란색으로 부드럽게 색상이 변환된다.
입력 값은 라디안
sin 함수는 입력 값으로 라디안을 요구한다. 도(degree)를 입력하려면 DegreesToRadians 함수를 사용하여 변환해야 한다.주기적인 움직임 제한
sin 함수는 무한히 반복되므로, 특정 조건에서 멈추거나 범위를 제한하는 로직이 필요할 수 있다.값의 스케일 조정
float ScaledValue = FMath::Sin(Time) * Amplitude + Offset;