도대체 반복문을 배워서 어디다 써 먹을까요?


예를 들어 원의 좌표를 구한다고 생각 해 보겠습니다.



원의 좌표는 중심점이 c 이고 반지름이 r 일때


x = c + r * cosA 

y = c + r * sinA 


입니다.


A 는 각도가 되겠습니다.


그럼, 중심점은 0,0 반지름은 1 인 원의 각도 0도 지점의 좌표는 무엇 일까요?


이해를 돕기 위해 다음 그림을 같이 보지요



이 원이 정확히 중심점은 0,0 반지름은 1 인 원이네요.



각도는 쎄타로 나타 내고 있는데 표시하기 어려운 관계로 A 라고 하겠습니다.


각도가 0도 일때 원위의 점은 어디 일까요?






바로 저 녹색 v가 가리키는 지점 일 겁니다, 좌표로는 반지름이 1 이니까 1,0 이 되겠네요.


정말 그런지 볼까요?



x = 0 + 1 * cos 0 = 1

y = 0 + 1 * sin 0  = 0


sin 0 은 0 이고 cos 0 은 1 이니까 맞네요.


그럼 0도 이외의 각도에서도 그게 정확히 맞아 떨어 질까요?


당연히 맞아 떨어집니다. 


삼각함수가 그럴때 쓰려고 만들어 놓은 거니까요


https://www.youtube.com/watch?v=YEB39NcNQe0


위에 동영상에 자세히 나오니까 한번 확인해 보세요~









아무튼, 그럼 반복문을 이용해서 원의 좌표를 0도만 이 아니고 전체에 대해서 한번에 구해 볼까요?



먼저

for i in range(100) 

이렇게 하겠습니다. 100은 원을 몇등분 할 것인가 가 되겠네요.

100이니까 원을 100등분... 

360 / 100 은 3.6 도니까 3.6 도마다의 원의 좌표를 구하겠습니다.

360 도는 파이로 계산 했을때 얼마 일까요? 

답은 2 파이 입니다.

즉 원을 한바퀴 돈 각도는 2 파이 라는거지요.

그럼 

3.6 도  =  2파이 / 100 

이겠네요.

그럼 0 도는 3.6도 * 0 이겠군요.

3.6도는 3.6 *1 도겠네요

7.2 도는 3.6 * 2....

한번 차례대로 써 보겠습니다.

0 = 3.6 * 0 

3.6 = 3.6 * 1

7.2 = 3.6 * 2

10.8 = 3.6 *3
.
.

.
.
356.4 = 360 * 99

360 = 360 * 100 = 0도!!!


그런데 맨 뒤에 숫자만 모아서 보면

0,1,2,3.....99 

( 360 도는 0도 다시 나온 녀석이니까 생략)

어디서 많이 본겁니다.

N 이 100 일때 0~99 ....

바로 range(100) 이죠.


그렇다면 다음과 같은 식이 의미 하는 것이 무엇인지 알수 있겠네요.

for i in range(100):
<tab>i * 2파이 / 100


위에서 2파이는 360도 이고 2파이 /100 은 3.6도 랬으니까 다시 써 보면 아래와 같지요

for i in range(100):
<tab>i * 3.6도




어디서 많이 본 식이 여기도 등장 하네요. i * 3.6도 라........

바로 위에 쭉 나열 했던 식과 동일 한 식 입니다.

i대신에 0 ,1 ,2 ,3 ,4 를 대입만 하면 식은 같아 지지요.


그리고 0,1,2,3,4.... 이 녀석은 바로 위에 말했다 시피 range(100) 이구요.

그렇다면....

for i in range(100):
<tab>i * 2파이 / 100 

는 0 도 부터 356.4 도 까지의 각도를 3.6도씩 더한 녀석들이 될 겁니다.


한번 직접 확인 해 보겠습니다.
파이썬 에서는 한글로 파이 는 인식을 못하니 파이 대신 np.pi 라는 걸로 대신 합니다.


for i in range(100):
<tab>print i * 2 * np.pi / 100


결과 값을 확인 하셨나요?

 그 결과값이 바로 각도들이 되겠습니다.


그렇다면 

중심점 + 반지름 * cos(위에서 구한 각도들 차례대로 대입) 

이렇게 하면 바로 x 의 좌표들이 나오겠네요.

y = 중심점 + 반지름 * sin(위에서 구한 각도들 차례대로 대입) 

이렇게 y 를 구하면 됩니다.



중심점은 0,0 으로 하기로 했고 반지름은 1 이니 다시 써 보면

x = cos(위에서 구한 각도들)

y = sin(위에서 구한 각도들)


이렇게 되는군요.



그렇다면 이제 마지막으로 할 일은 다음과 같습니다.


1. 각도를 구한다.
2. 각도를 cos,sin 에 대입 해서 x 와 y 의 좌표를 구한다.
3. 그 좌표로 이동한다.
4. 각도를 3.6도 증가 시킨다

1부터 4까지 100번 반복한다


이걸 파이썬 코드로 옮겨 볼까요?
(파이썬 에서는 sin 대신 np.sin , cos 대신 np.cos 을 사용 합니다)
원을 그리는게 보이도록 line(True) 을 꼭 해줘야 합니다.

for i in range(100):
<tab>line(True)
<tab>angle =  i * 2 * np.pi / 100
<tab>x = np.cos(angle)
<tab>y = np.sin(angle)
<tab>moveabs(x,y)



간단하군요~!



중심점과 반지름을 바꿔 가면서 다양하게 그려 보면 좋을것 같습니다.














Posted by 안졸리냐젤리
BLOG main image
. by 안졸리냐젤리

공지사항

카테고리

전체보기 (13)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

Total :
Today : Yesterday :