유니티

[SinCosTan 그래프] 삼각함수 그래프 그리기 및 움직이기

수다밀다_sudamilda 2022. 12. 16. 03:36
728x90

멈춰져있는 그래프 

 

그래프마다 Mathf.Sin(x) Mathf.Cos(x) Mathf.Tan(x) 바꿈

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // UI 사용

public class SinGrape : MonoBehaviour
{
    public LineRenderer sinelinerenderer;
    public int dot_number; // 그래프에 찍는 점의 갯수

    void Start()
    {
        sinelinerenderer = GetComponent<LineRenderer>(); // LineRenderer 사용
    }

    void Update()
    {
        Sin(); // 프레임마다 찍힘(x 값만 보면 2파이값에 점점 가까워진다.)
    }

    void Sin()
    {
        float x_0 = 0; // x 시작점
        float delta = 2 * Mathf.PI; // delta 값을 2파이로 설정
        float x_n = delta; // x 끝점

        sinelinerenderer.positionCount = dot_number; // 그래프 점 찍는 갯수 입력

        for(int currentPoint = 0; currentPoint<dot_number; currentPoint++) // 첫 값 0, 끝까지 1씩 늘리면서 반복
        {
            float progress = (float)currentPoint / (dot_number - 1); // n번째/(점 갯수-1)
            float x = Mathf.Lerp(x_0, x_n, progress); // 점x_0, 점x_n 사이의 %값 (0,1,0.2)라면 0 0.2 0.4 0.8에 점이 찍힘
            float y = Mathf.Sin(x);
            sinelinerenderer.SetPosition(currentPoint, new Vector3(x, y, 0)); // 선 벡터로 표시
        }
    }
}

 

 

 

움직이는 그래프

 

Mathf.Sin(x)에서

함수 안의 x값을 움직인다.

Time.time으로 시간이 흐를때마다

x값을 변화시킨다.

Mathf.Sin(x) -> Mathf.Sin(x+Time.time)

 

계속 움직이나

삼각함수의 주기성때문에

반복되는 것 처럼 보임

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; // UI 사용

public class SinWave : MonoBehaviour
{
    public LineRenderer sinelinerenderer;
    public int dot_number; // 그래프에 찍는 점의 갯수

    void Start()
    {
        sinelinerenderer = GetComponent<LineRenderer>(); // LineRenderer 사용
    }

    void Update()
    {
        Sin(); // 프레임마다 찍힘(x 값만 보면 2파이값에 점점 가까워진다.)
    }

    void Sin()
    {
        float x_0 = 0; // x 시작점
        float delta = 2 * Mathf.PI; // delta 값을 2파이로 설정
        float x_n = delta; // x 끝점

        sinelinerenderer.positionCount = dot_number; // 그래프 점 찍는 갯수 입력

        for (int currentPoint = 0; currentPoint < dot_number; currentPoint++) // 첫 값 0, 끝까지 1씩 늘리면서 반복
        {
            float progress = (float)currentPoint / (dot_number - 1); // n번째/(점 갯수-1)
            float x = Mathf.Lerp(x_0, x_n, progress); // 점x_0, 점x_n 사이의 %값 (0,1,0.2)라면 0 0.2 0.4 0.8에 점이 찍힘
            float y = Mathf.Sin(x + Time.time);
            sinelinerenderer.SetPosition(currentPoint, new Vector3(x, y, 0)); // 선 벡터로 표시
        }
    }
}
728x90