도대체 반복문을 배워서 어디다 써 먹을까요?
예를 들어 원의 좌표를 구한다고 생각 해 보겠습니다.
원의 좌표는 중심점이 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)
간단하군요~!
중심점과 반지름을 바꿔 가면서 다양하게 그려 보면 좋을것 같습니다.