240207-TIL

2024. 2. 7. 21:11내일배움캠프

오늘도 여전히 수학공부다

 

어제 삼각함수를 활용하여 회전 위치 구하기 까지 정리했던것 같은데

 

삼각함수 활용 회전위치 구하기

더보기
//
Vector2 pos;
pos.x = Mathf.Cos(45 * Mathf.Deg2Rad);
pos.y = Mathf.Sin(45 * Mathf.Deg2Rad);
transform.postiion = pos;


//
void Update()
{
	Vector2 pos;
	pos.x = Mathf.Cos(Time.time);
	pos.y = Mathf.Sin(Time.time);
	transform.postiion = pos;
}

 

어제 써놨던 예제 코드를 다시 한번 가져와보자.

 

이걸로 어떻게 회전위치를 구한다는 거야 참....

 

유니티에서 따졌을때 유니티는 항상 밑변의 단위값을 1로 잡고 시작을 한다고 한다.

 

밑변의 길이가 1일때 사인 값을 구하면 어떻게 될까? 분모가 1이고 분자인 높이가 c니깐 

 

사인값은 그냥 높이 그대로 c가 된다 x축과 y축에서 높이에 해당하는 것은 뭘까? 바로 y축이다

 

코사인값은 어떻게 될까? 분모가 1이고 밑변의 길이가 a니깐 코사인 값은 그대로 밑변 a가 되는 것이다.

 

아하 그럼 예시 코드에서의

 

pos.y = Mathf.Sin(45 * Mathf.Deg2Rad); 이게 어떻게 동작되는건지 대충 이해가 된다.

 

다시 그림으로 보자

 

 

y좌표 값을 알고 싶다고 한다 pos.y =  

 

Mathf.Sin() 으로 sin값을 구해 높이(y)값을 구할건데 이때 매개변수로 주어진값이 45도(디그리)

유니티 Documentation에서의 Mathf.Sin 의 매개변수는 

 

 

 라디안 단위의 입력 각도를 쓸수 있다고 한다.

 

45도의 디그리 값을 라디안으로 변환하는 것은? 45도를 Mathf.Deg2Rad 로 곱해주는 것

 

pos.y = Mathf.Sin(45 * Mathf.Deg2Rad);

 

x축도 마찬가지이다 다만 연산을 Mathf.Cos()를 이용해서 계산하면 된다

 

pos.x = Mathf.Cos(45 * Mathf.Deg2Rad);

 

void Update()
{
	Vector2 pos;
	pos.x = Mathf.Cos(Time.time);
	pos.y = Mathf.Sin(Time.time);
	transform.postiion = pos;
}

 

이제 아래 코드처럼 45도로 특정한게 아니라 계속해서 변하는 값을 주게되면?

 

 나를 기준으로 거리가 1만큼의 계속 뱅글뱅글 순환하는 좌표를 얻을수가있다.

 

자전하는 모습을 만든다거나? 스킬을 썼을때 뱅글뱅글 도는 모습을 만들어야 하거나?

 

그럴때 써먹을 수 있겠지

 

 

역함수

더보기

역삼각함수 삼각함수의 역함수라고 한다

 

자세하게 살펴보기 전에 그냥 삼각함수 사인 코사인 탄젠트와 뭐가 다른지 표로 한번 보고가자

 

 

삼각함수의 삼총사 사인, 코사인, 탄젠트가 있다면 역함수에는 아크사인, 아크코사인, 아크탄젠트가 있다.

 

삼각함수는 세타값을 가지고 비율을 찾는 과정이라고 한다면 역함수는

 

이미지대로 비율을 가지고 세타값을 찾아가는 과정이라고 한다.

 

  • 아크사인 (asin)

 아크사인 함수는 주어진 값의 사인이 어떤 각도에 해당하는지를 찾아낸다.

 

아크사인 함수는 -1에서 1 사이의 값을 입력으로 받아 해당 값에 대한 각도(라디안)를 반환하는데

 

결과 각도는 -π/2에서 π/2 사이의 범위에 있다.

 

또 자세히 뜯어보자 왜 아크사인의 함수의 값은 -1에서 1사이의 값을 입력으로 받을까?

 

자 원에서 직각삼각형이 어떤 모양으로 변해도 높이의 값은 -1에서 1사이의 값이 나온다

 

그림으로 보자

 

그림을 보면 좀 찌그러져서 각도가 극단적으로 찌그러져갈때 직각삼각형 의 형태는 유지한채로 높이를 구하려고

 

하기 때문에 빗변이 밑변에 닿아있는 형태의 직각삼각형은 높이가 0일 것이다 

 

이렇게 각이 커지고 줄어듬에 따라 직각삼각형의 높이 즉 y값은 -1에서 1까지 입력받을 수 있는 것이다

 

이때 반환 받을수있는 세타값 즉 각도는 -90도 ~ 90도 (-π/2에서 π/2 사이의 범위)에 있다.

 

사인을 이해했으면 코사인은 쉽다

 

사인은 높이 y값 코사인은 x값이다

 

  • 아크코사인 (acos)

아크코사인 함수는 주어진 값의 코사인이 어떤 각도에 해당하는지를 찾아낸다.

 

아크코사인 함수도 -1에서 1 사이의 값을 입력으로 받아 해당 값에 대한 각도(라디안)를 반환한다.

 

결과 각도는 0에서 π 사이의 범위에 있다.

 

 

  • 아크탄젠트 (atan)

아크탄젠트 함수는 주어진 값의 탄젠트가 어떤 각도에 해당하는지를 찾아낸다.

 

아크탄젠트 함수는 모든 실수 값을 입력으로 받아 해당 값에 대한 각도(라디안)를 반환한다.

 

결과 각도는 -π/2에서 π/2 사이의 범위에 있다.

 

 

역함수 활용 예제코드

using UnityEngine;

public class AngleCalculation : MonoBehaviour
{
    public Transform pointA;
    public Transform pointB;

    void Update()
    {
        // 두 점 간의 벡터를 구합니다.
        Vector3 vectorAB = pointB.position - pointA.position;

        // 아크탄젠트를 사용하여 각도를 계산합니다.
        float angle = Mathf.Atan2(vectorAB.y, vectorAB.x) * Mathf.Rad2Deg;

        // 결과를 콘솔에 출력합니다.
        Debug.Log("Angle between points: " + angle);
    }
}

 

 

그리고 지금까지의 요약

using UnityEngine;

public class TrigonometryExample : MonoBehaviour
{
    void Start()
    {
        // 각도를 라디안으로 변환
        float angleInDegrees = 45f;
        float angleInRadians = angleInDegrees * Mathf.Deg2Rad;

        // 사인, 코사인, 탄젠트 계산
        float sineValue = Mathf.Sin(angleInRadians);
        float cosineValue = Mathf.Cos(angleInRadians);
        float tangentValue = Mathf.Tan(angleInRadians);

        // 아크사인, 아크코사인, 아크탄젠트 계산
        float angleFromSine = Mathf.Asin(sineValue) * Mathf.Rad2Deg;
        float angleFromCosine = Mathf.Acos(cosineValue) * Mathf.Rad2Deg;
        float angleFromTangent = Mathf.Atan(tangentValue) * Mathf.Rad2Deg;
    }
}

오늘도 어제에 이어서 삼각함수를 마무리 지었다.

 

그래도 정리하다가 어 이게 내가 생각하는게 맞나? 하면서 또 보고

 

어 기억이 안나면 다시한번 보고

 

또 보고 또 써보고

 

...

 

하다 보니깐 좀 친해진거 같긴하다

 

그래도 여전히 머리아프긴 한데 이제 누가 물어보면 어 이거 그런거야 그런느낌이야

 

라고 말해줄 정도는 되는것 같다.

 

2월 7일 TIL은 여기서 마치도록 하겠다.

 

 

'내일배움캠프' 카테고리의 다른 글

240213-TIL  (0) 2024.02.13
240208-TIL  (0) 2024.02.08
240206-TIL  (0) 2024.02.06
240205-TIL  (0) 2024.02.05
240202-TIL  (0) 2024.02.02