๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Unity

๋ผ๋””์•ˆ(radian), ์‚ผ๊ฐํ•จ์ˆ˜(Sin, Cos, Atan2)

by ใ…Ž-ใ…Ž 2022. 10. 14.

๋ผ๋””์•ˆ(radian)

- ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” 60๋ถ„๋ฒ•(๋‹จ์œ„ degree)์ด ์•„๋‹Œ, ํ˜ธ๋„๋ฒ•(ํ˜ธ์˜ ๊ธธ์ด๋กœ ๊ฐ๋„๋ฅผ ํ‘œํ˜„)์ด๋ผ๋Š” ๊ฐ๋„ ํ‘œํ˜„ ๋ฐฉ๋ฒ•์˜ ๋‹จ์œ„

- ์™œ? ์‹ค์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ.

- 1 ๋ผ๋””์•ˆ : ํ˜ธ์˜ ๊ธธ์ด๊ฐ€ ๋ฐ˜์ง€๋ฆ„๊ณผ ๊ฐ™์•„์ง€๋Š” ๊ฐ(์•ฝ 57.2958º)

- ๋ผ๋””์•ˆ ๊ฐ = ํ˜ธ์˜ ๊ธธ์ด / ๋ฐ˜์ง€๋ฆ„์˜ ๊ธธ์ด

- ์œ„ํ‚ค๋ฐฑ๊ณผ์—์„œ ๋งํ•˜๋Š” '์–ด๋–ค ๊ฐ์˜ ๋ผ๋””์•ˆ ๊ฐ’์€ ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋‹จ์œ„์› ์ค‘์‹ฌ๊ฐ์ด ๋Œ€ํ•˜๋Š” ํ˜ธ์˜ ๊ธธ์ด์™€ ๊ฐ™๋‹ค. '์˜ ์˜๋ฏธ๋Š”..

  ์›์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์ง€๋ฆ„์ด 1์ธ ์›(๋‹จ์œ„์›)์œผ๋กœ ์ค„์ธ ๋‹ค์Œ, ๊ทธ ํ˜ธ์˜ ๊ธธ์ด๋ฅผ ์žฌ๋ฉด ๋ผ๋””์•ˆ ๊ฐ’์ด ๋œ๋‹ค๋Š” ๋ง์ด๋‹ค.

- degree๊ฐ€ º ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋“ฏ ๋ผ๋””์•ˆ์€ rad ๋˜๋Š” c ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉ(ํ•˜๋‚˜, ๋ผ๋””์•ˆ ๊ฐ’ ์ž์ฒด๊ฐ€ ํ˜ธ์™€ ๋ฐ˜์ง€๋ฆ„์˜ ๋น„์œจ ๊ฐ’์ด๋ฏ€๋กœ ๊ธฐํ˜ธ๊ฐ€ ์ƒ๋žต๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.)

- π = ์›์˜ ๋‘˜๋ ˆ / ์ง€๋ฆ„ → π = (์›์˜ ๋‘˜๋ ˆ / 2) / (์ง€๋ฆ„ / 2)   π = ๋ฐ˜์›์˜ ๋‘˜๋ ˆ / ๋ฐ˜์ง€๋ฆ„ ์ด๋ฏ€๋กœ, ๋ผ๋””์•ˆ์—์„œ π๋Š” 180º ์˜๋ฏธํ•˜๊ฒŒ ๋œ๋‹ค.

- degree๋ฅผ radian์œผ๋กœ : 180º = π 1º = π / 180º  ์•ฝ 0.0175(Mathf.Deg2Rad)๋ฅผ degree ๊ฐ’์— ๊ณฑํ•ด์ฃผ๊ธฐ

- radian์„ degree๋กœ : 180º = π  1 rad = 180º / π   ์•ฝ 0.0175(Mathf.Rad2Deg)๋ฅผ radian ๊ฐ’์— ๊ณฑํ•ด์ฃผ๊ธฐ

 

 

 

์‚ฌ์ธ, ์ฝ”์‚ฌ์ธ

 

์‚ฌ์ธ ํ•จ์ˆ˜์™€ ์ฝ”์‚ฌ์ธ ํ•จ์ˆ˜ ๊ทธ๋ž˜ํ”„

 

์‚ฌ์ธ(Sine, Sin)

- Sin θ = ๋†’์ด(y)/๋น—๋ณ€(r)

- 0๋ถ€ํ„ฐ ์‹œ์ž‘ → x ๊ตฌํ•˜๊ธฐ

- θ์˜ ๊ฐ’์— ๋”ฐ๋ฅธ sin θ → 0(0º) = 0, π/2(90º) = 1, π(180º) = 0, 3π/2(270º), 2π(360º) = -1

 

 

์ฝ”์‚ฌ์ธ(Cosine, Cos)

- Cos θ = ๋ฐ‘๋ณ€(x)/๋น—๋ณ€(r)

- 1๋ถ€ํ„ฐ ์‹œ์ž‘   y ๊ตฌํ•˜๊ธฐ

- θ์˜ ๊ฐ’์— ๋”ฐ๋ฅธ cos θ → 0(0º) = 1, π/2(90º) = 0, π(180º) = -1, 3π/2(270º), 2π(360º) = 0

 

r๋ถ„์˜ y~ ์‚ฌ~์ธ ํ•จ์ˆ˜~

r๋ถ„์˜ x ์ฝ”์‚ฌ์ธ ํ•จ์ˆ˜~

x๋ถ„์˜ y~ ํƒ„์  ํŠธ ํ•จ์ˆ˜~

 

์‚ฌ์ธ๊ณผ ์ฝ”์‚ฌ์ธ์„ ์ด์šฉํ•˜๋ฉด ์›์„ ๊ทธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

timer += Time.deltaTime;

float rotatingDegree = (timer * rotatingSpeed) % 360;

float rotatingRadian = rotatingDegree * Mathf.Deg2Rad;	//์ด ๊ฐ’์— -๋ฅผ ๋ถ™์ด๋ฉด ์›์ด ๋ฐ˜๋Œ€๋กœ ํšŒ์ „ํ•œ๋‹ค.
float xPos = Mathf.Cos(rotatingRadian) * radius;
float yPos = Mathf.Sin(rotatingRadian) * radius;
//Debug.Log($"rotatingDegree : {rotatingDegree}, rotatingRadian : {rotatingRadian}, xPos : {xPos}, yPos : {yPos}");

RotatingObject.transform.position = new Vector3(xPos, yPos);

 

 

์•„ํฌํƒ„์  ํŠธ(Arctan, Atan, Atan2)

- ํƒ„์  ํŠธ์˜ ์—ญํ•จ์ˆ˜

- ํƒ„์  ํŠธ : tan θ = ๋†’์ด(y)/๋ฐ‘๋ณ€(x)

- ๊ทธ๋ž˜์„œ ์—ญํ•จ์ˆ˜์ธ ์•„ํฌํƒ„์  ํŠธ๋กœ ๊ฐ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค : atan y/x = θ

- ์ฃผ๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๋ฐฉํ–ฅ์ด๋‚˜ ๋ฒกํ„ฐ๋กœ ๊ฐ์„ ๊ตฌํ•  ๋•Œ ์‚ฌ์šฉ

- Atan( _ ) ํ•จ์ˆ˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ y / x ๊ฐ’ ํ•˜๋‚˜๋งŒ ๋„ฃ์–ด์ฃผ๊ณ , -π/2 ~ π/2๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

- Atan2( _, _ )๋Š” y, x ๊ฐ’์„ ๊ฐ๊ฐ ๋„ฃ์–ด์ฃผ๊ณ , -π ~ π๋กœ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

  -> Atan ํ•จ์ˆ˜์—์„œ 0์œผ๋กœ ๋‚˜๋ˆŒ ์‹œ ๋ฐœ์ƒํ–ˆ๋˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ์Œ์ˆ˜์ธ ๋ฐ˜ํ™˜ ๊ฐ’๋„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์„œ ์œ ๋ฆฌํ•จ

 

 

 

https://spiralmoon.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%9D%B4%EB%A1%A0-%EB%91%90-%EC%A0%90-%EC%82%AC%EC%9D%B4%EC%9D%98-%EC%A0%88%EB%8C%80%EA%B0%81%EB%8F%84%EB%A5%BC-%EC%9E%AC%EB%8A%94-atan2

 

https://youtu.be/ikGOSX6TXy0

 

https://velog.io/@sonohoshi/7.-Mathf.Atan2%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

๋Œ“๊ธ€