유니티
[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