조류조화분해를 진행하기에 앞서 유속과 유향값을 U, V로 변환하는 법에 대해 알아보도록 하겠다. 관측을 통해 얻은 해수유동 값은 보통 유속과 유향으로 표기된다. 해수유동(조류) 값은 크기와 방향을 가진 벡터값인데 이를 분석하기 위해서는 방향을 제거한 스칼라값인 U, V로 변환해야 한다. 오늘은 이 과정에 대해 알아보도록 하겠다.
1. 좌표계 기준 변환
유속과 유향을 U, V로 변환하려면 먼저, 방향 값을 Radian 값으로 변환해야 한다. 하지만 수학적 표현인 Radian의 각도와 방향의 각도는 기준이 서로 다르다. 아래 왼쪽 그림처럼 방향을 나타낼 때는 북쪽을 기준으로, 시계방향으로 0~360도로 표현하지만 좌표계에서는 동쪽을 기준으로 반시계방향으로 0~360도로 표현된다.
- 방향계 - 북쪽이 0도, 시계방향
- 좌표계 - 동쪽이 0도, 반시계방향
따라서, 유향의 진행 방향을 반대로 바꿔줘야하며 기준도 동쪽으로 바꿔야한다. 원래의 값에 -1을 곱하면 반대방향이 되고, 거기에 90도를 더하여 기준을 북쪽에서 동쪽으로 90도만큼 회전시켜주면 된다.
예를 들어보겠다. 아래 그림과 같이 원래 60도인 방향은 직교좌표계로 표현하면 30도가 된다. 이를 계산하려면 원래의 각도 (degree x -1) + 90을 하면 된다(60 x -1 + 90 = 30). 마찬가지로 남동쪽 방향의 120도는 120x-1+90 = -30도(330도)가 된다.
2. U, V 값 계산
변환한 각도를 radian 값으로 바꿔줘야 하는데 파이썬에서는 numpy의 deg2rad함수를 쓰면 된다. 이제 각도를 알았으니, 고등학교 때 배웠던 삼각함수를 활용하면, 아래 그림과 같이 u, v를 구할 수 있다.
이를 유속과 유향에 대입해보면, u = cos(radian유향) x 유속이 되고, v = sin(radian유향) x 유속이 된다. 이를 코드에 대입해보면 아래와 같다.
u = [math.cos(np.deg2rad(degree[i]))*speed[i] for i in range(len(degree))]
v = [math.sin(np.deg2rad(degree[i]))*speed[i] for i in range(len(degree))]
테스트를 위해 유속이 5일 때, 30도부터 30도 간격으로 330도까지의 유향을 u, v로 바꿔보겠다.
degree = np.array([30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330])
degree2 = degree*-1+90
speed = np.array([5,5,5,5,5,5,5,5,5,5,5])
u = [math.cos(np.deg2rad(degree2[i]))*speed[i] for i in range(len(degree2))]
v = [math.sin(np.deg2rad(degree2[i]))*speed[i] for i in range(len(degree2))]
그럼 아래와 같이 u, v가 계산된 것을 확인할 수 있다. 1행인 30일 때는 x값인 u가 2.5, y값인 v가 4.3으로 (2.5, 4.3)의 벡터와 동일하게 나타났다. 이후의 값들도 마찬가지로 u(x), v(y)의 값이 입력한 유향의 방향과 동일한 것을 확인할 수 있다.
지난 조석조화분해에 이어 조류조화분해를 진행하는 도중에 유속과 유향값의 U, V로 변환할 필요가 있었다. 조류 분석이 너무 오랜만이라 그런지 헷갈려서 공부하는 김에 관련 내용을 소개해보았다. 다음 글에서는 다시 조화분해로 돌아가서 조류조화분해를 과정을 소개해보도록 하겠다.
'자료분석 및 코딩 > 파이썬' 카테고리의 다른 글
[조화분해] 파이썬을 활용한 조화분해(harmonic analysis) - 2. t-tide (1) | 2025.01.02 |
---|---|
[조화분해] 파이썬을 활용한 조화분해(harmonic analysis) - 1. 조화분해란 (0) | 2024.12.31 |
[파이썬] 해양수치모델 검증 - 1. nc 파일읽기, 특정 지점(위치) 찾기, 최근접 격자 찾기 (1) | 2024.04.30 |
[파이썬] 해양수치모델 시간 형식 변환. GMT, UTC, KST, 그리니치, 줄리안 데이 변환 (0) | 2023.06.30 |
[파이썬] 해양수치모델 NetCDF 자료처리. 파이썬 Nc 파일 읽기 ncread (5) | 2023.06.28 |