아래 문제를 풀어보면서 복소수의 개념을 짚고 가도록 하겠습니다!
"복소수 공간에서 x+yi 복소수는 (x,y)의 위치에 있는 점으로 표현된다. 이 점을 원점기준으로 각도 a(라디안으로 표시)만큼 회전시키는 방법은 cos a + (sin a)j를 곱하면 되는 것으로 알려져 있다."
문제1) 어떤 좌표 (1,2)가 복소수 형태인 1+2j로 주어지면, 그림과 같이 이 좌표를 반시계 방향으로 90도 회전시키는 방법을 파이썬의 복소수 곱으로 구하여 아래와 같이 출력해보라
실행결과>
회전하기 전 : (1+2j)
90도 회전한 후: (-2+1j)
일단, 파이썬 으로 복소수를 표현하는 방법에 대해서 짚고 가겠습니다.
복소평면에서의 (1,1)의 표현은 다음과 같이 j앞에 반드시 계수(coefficient)가 하나 붙어야 합니다.
(설령 (1,1)이라서 1+j라 표현할 수 있을지라도 code상으로는 1+1j라 표현을 해주어야 합니다.)
print(type(1+j)) #-> error발생, j를 고유의 변수로서 취급함
print(type(1:1j)) #-> complex number로 인지함
print(type(j)) #-> error발생, j를 고유의 변수로서 취급함
print(type(1j)) #-> complex number로 인지함
기본적으로 아래와 같이 설정을 해줄 수 있겠죠?
before = 1+2j
print("회전하기 전 : ", before)
이제 90도를 회전시켜주기 위해 90도 만큼을 복소수로 표현한 후 곱해주도록 하겠습니다.
after = before * (math.cos(0.5*math.pi) + math.sin(0.5*math.pi)*1j)
print("90도 회전한 후 : ", after)
이렇게 하고 실행을 해보겠습니다.
원하는 결과가 나왔지만, 뒤에 쓸데없이 많은 소수점이 붙어서 한번 필터링을 해주도록 하겠습니다.
※파이썬 round함수로 소수점 관리하기
syntax: round( {반올림하고자 하는 값} , {자릿수})
ex)
특수케이스)print(f"round(1.23456, 0)", round(1.23456, 0)) #-> 1(정수출력)
print(f"round(1.23456, 0)", round(1.23456, 0)) #-> 1.0 (실수출력)
print(f"round(1.23456, 1)", round(1.23456, 1)) #-> 1.2
print(f"round(1.23456, 2)", round(1.23456, 2)) #-> 1.23
위 개념을 이용하여 다시 코드를 작성해보겠습니다.
import math
before = 1+2j
print("회전하기 전 :", before)
after = before * (math.cos(0.5*math.pi) + math.sin(0.5*math.pi)*1j)
print("90도 회전한 후 :", after)
after = after.real + round(after.imag) * 1j
print("90도 회전한 후 (filtered) :",after)
실행결과>
문제2) 어떤 좌표 (1,2)를 반시계방향으로 30도 회전하여라. 그 결과를 복소수 형태로 출력하여라.
(힌트: cos 30º = sqrt(3)/2, sing 60º = 1/2)
실행결과>
회전하기 전 : (1+2j)
30도 회전한 후: (-0.1339745962155614+2.232050807568877j)
이번에는 30도를 회전시켜주기 위해 30도 만큼을 복소수로 표현한 후 곱해주도록 하겠습니다.
(단, 이번에는 반대방향임을 고려하여 -30도 표현해주도록 하겠습니다.)
import math
before = 1+2j
print("회전하기 전 :", before)
#after = before * (math.cos(-math.pi/6) + math.sin(-math.pi/6)*1j)
after = before * ((3**0.5)/2 + 0.5 * 1j)
print("-30도 회전한 후 :", after)
after = round(after.real, 3) + round(after.imag,3) * 1j
print("-30도 회전한 후 (filtered) :",after)
실행결과>
지금까지 예제를 통해 파이썬으로 복소수를 구현하는 방법에 대해 알아보았습니다!
참고 사이트>
https://velog.io/@yunhlim/Python-%EB%B3%B5%EC%86%8C%EC%88%98complex-%ED%91%9C%ED%98%84
https://ehpub.co.kr/tag/python-%EB%B3%B5%EC%86%8C%EC%88%98-%ED%91%9C%ED%98%84/
'Grammer' 카테고리의 다른 글
클래스의 개념에 대해 (0) | 2023.06.03 |
---|---|
파이썬 format 함수에 대해 알아보자!(문자열 포매팅 방법(1)) (4) | 2023.01.29 |
댓글