07
22

어원 등 개념 이해에 대한 좋은 영상

인공지능수학 깨봉 채널 - 어원으로 배우는 삼각함수 개념 총정리 영상
어원을 듣고 이해하니 훨씬 쉽다. 위 영상은 삼각함수를 배우기 전의 학생들에게 매우 강추하고 싶다.

사인

라틴어 "sinus"에서 유래되었다.

"Sinus"는 기울어진 선이나 곡선으로 이루어진 공간을 의미하는데,
이 용어가 삼각함수에서 사용된 것은 삼각형에서 각도에 대한 선의 길이를 나타낼 때
사용된 형태가 닮음비로 인해 곡선과 유사하다고 여겨졌기 때문이다.

사인함수는 삼각형에서 특정 각도의 각 변의 길이 비율을 나타내는데,
특히 빗변과 높이 사이의 비율을 의미한다.
예를 들어, 직각삼각형에서 특정 각도의 사인 값은 빗변과 그에 수직인 높이의 비율을 나타낸다.
예제 코드
: 캐릭터 점프 높이 제어
using UnityEngine;

public class JumpHeight : MonoBehaviour
{
    public float jumpForce = 5f;
    public float jumpTime = 1f;
    private bool isJumping = false;
    private float jumpTimer = 0f;

    private void Update()
    {
        // 점프 버튼을 누르면 점프 시작
        if (Input.GetButtonDown("Jump") && !isJumping)
        {
            isJumping = true;
            jumpTimer = 0f;
        }

        // 점프 중인 경우
        if (isJumping)
        {
            jumpTimer += Time.deltaTime;
            // 사인 함수를 이용하여 캐릭터의 높이를 제어
            float jumpHeight = Mathf.Sin(Mathf.PI * jumpTimer / jumpTime) * jumpForce;

            // 캐릭터를 위로 이동
            transform.position += Vector3.up * jumpHeight * Time.deltaTime;

            // 점프 시간이 경과하면 점프 종료
            if (jumpTimer >= jumpTime)
            {
                isJumping = false;
            }
        }
    }
}
// 사인 함수를 사용하여 캐릭터의 점프 높이를 제어하는 스크립트
// 사인 함수를 이용하여 점프 타이밍에 따라 캐릭터가 부드럽게 높이를 올리고 내리도록 구현함

위 스크립트 중간에 나온 Mathf.PI는?

원주율(pi)의 근사치인 상수 값으로, 약 3.141592653589793이다.
주로 원의 둘레와 관련된 계산에서 사용되며, 삼각함수 계산 등에도 활용된다.

Mathf.PI를 이용하여 원주율 값을 직접 사용하거나, Mathf.Rad2Deg를 이용하여
라디안 값을 각도 값으로 변환하면 편리하게 계산할 수 있다.

예를 들어, Mathf.PI / 2는 90도를 라디안 값으로 표현한 것이며,
Mathf.Rad2Deg * Mathf.PI / 2는 90도를 라디안 값에서 각도 값으로 변환한 것이다.

코사인

라틴어 "cosinus"에서 유래되었다.

"Cosinus"는 sine의 Co로서 각도와 점을 이루는 변 사이의 길이를 의미하는데,
이것이 코사인 함수의 이름으로 채택된 이유다.

코사인함수는 삼각형에서 특정 각도의 각 변의 길이 비율을 나타내는데,
특히 밑변과 빗변 사이의 비율을 의미한다.
삼각함수에서 사인과 코사인은 서로 직교하며,
같은 각도에 대해 각 변의 길이를 다른 방향으로 비교한다.
예제 코드: 움직이는 플랫포머 블록
using UnityEngine;

public class MovingBlock : MonoBehaviour
{
    public float amplitude = 1f; // 블록의 움직임 범위를 결정
    public float frequency = 2f; // 움직임의 빈도를 결정
    private Vector3 startPos;

    private void Start()
    {
        startPos = transform.position;
    }

    private void Update()
    {
        // 코사인 함수를 이용하여 시간에 따라 블록이 부드럽게 좌우로 움직임
        float movement = Mathf.Cos(Time.time * frequency) * amplitude;
        transform.position = startPos + Vector3.right * movement;
    }
}

탄젠트

라틴어 "tangens"에서 유래되었다.

"Tangens"는 닿아있다는 의미로서 삼각형에서 특정 각도의 접선과 높이 사이의 길이 비율을 의미한다.

탄젠트 함수는 삼각형에서 특정 각도의 접선과 높이 사이의 길이 비율을 나타내는데,
특히 밑변과 높이 사이의 비율을 의미한다.

탄젠트 함수는 다른 삼각함수와 달리 무한대에서 무한대까지 다양한 값을 가질 수 있으며, 특정 각도에서 수직으로 접하는 기울기를 나타낼 때 유용하게 사용된다.
예제 코드
: 플레이어의 시야각 계산
  (특정방향을 바라볼 때 제한된 시야각, 플레이어의 카메라 움직임을 기준으로 캐릭터의 시야각을 조절하기 위해 탄젠트 함수를 사용할 수 있음)
using UnityEngine;

public class CharacterVision : MonoBehaviour
{
    public float maxAngle = 60f; // 캐릭터의 최대 시야각
    public float minAngle = 30f; // 캐릭터의 최소 시야각
    public float rotationSpeed = 5f; // 카메라 회전 속도

    private Transform playerCamera; // 플레이어의 카메라

    void Start()
    {
        playerCamera = Camera.main.transform; // 메인 카메라를 플레이어의 카메라로 설정
    }

    void Update()
    {
        // 카메라의 x축 회전값을 angle로 변환
        float angle = playerCamera.rotation.eulerAngles.x;

        // 시야각을 탄젠트 함수를 사용하여 조절
        float targetFov = Mathf.Lerp(minAngle, maxAngle, Mathf.Tan(angle * Mathf.Deg2Rad));

        // 캐릭터의 시야각을 변경
        SetCharacterFOV(targetFov);
    }

    void SetCharacterFOV(float fov)
    {
        // 여기서 캐릭터의 시야각을 변경하는 로직을 작성하면 된다.
        // 예를 들어, 캐릭터의 시야를 제한하는 방법은 카메라의 Field of View를 조절하거나,
        // 캐릭터의 시야를 표현하는 Mesh의 크기를 조절하는 등의 방법이 있을 수 있다.
    }
}

사인, 코사인, 탄젠트 함수의 공통점

모두 인자값으로 라디안(Radians)을 사용한다.
라디안의 정의는 위키백과 - 라디안에서 볼 수 있다.
COMMENT