Python의 곡선 곡률
![Python의 곡선 곡률](/img/Numpy/feature-image---curvature-formula-numpy.webp)
곡률은 직선에서 곡선의 편차를 측정 한 것입니다. 예를 들어 원은 반경의 역수로 곡률을 갖는 반면 직선은 0의 곡률을 갖습니다.
이 튜토리얼에서는 numpy 모듈을 사용하여 Python에서 곡선의 곡률을 계산하는 방법을 배웁니다. 속도, 가속도 등과 같은 다른 양도 계산합니다. 아래 그림에서 필요한 공식을 찾을 수 있습니다.
우리는 다음 곡선으로 작업 할 것입니다.
import numpy as np
import matplotlib.pyplot as plt
coordinates = np.array(
[[1, 1], [1.5, 2], [2, 3], [2.5, 3.5], [3, 4], [3.5, 4.25], [4, 4.5]]
)
plt.plot(coordinates[:, 0], coordinates[:, 1])
출력:
곡선과 관련된 이러한 문제의 경우 각 지점에서 주어진 곡선의 미분을 계산해야합니다. 이러한 경우에numpy.gradient()
메서드가 사용되며, N 차원 배열의 기울기를 반환합니다.
다음 코드에서는 모든 지점에서 곡선의 속도를 계산합니다.
x_t = np.gradient(coordinates[:, 0])
y_t = np.gradient(coordinates[:, 1])
vel = np.array([[x_t[i], y_t[i]] for i in range(x_t.size)])
print(vel)
출력:
[[0.5 1. ]
[0.5 1. ]
[0.5 0.75 ]
[0.5 0.5 ]
[0.5 0.375]
[0.5 0.25 ]
[0.5 0.25 ]]
속도를 계산 한 후 속도로 진행합니다. 이제 속도는 속도의 계수입니다. 그러나 지금까지 모든 것이 t의 함수라는 것을 알아야합니다 (t는 시간 간격을 나타냄). 따라서 우리는 속도를 1 초 간격의 값의 숫자 배열로 나타낼 것입니다.
아래 코드를 참조하십시오.
speed = np.sqrt(x_t * x_t + y_t * y_t)
print(speed)
출력:
[1.11803399 1.11803399 0.90138782 0.70710678 0.625 0.55901699
0.55901699]
이제 탄젠트를 계산하기 위해 속도와 속도의 크기가 동일한 지 확인하는 몇 가지 변환을 수행합니다. 또한 벡터 값 속도 함수를 스칼라 속도 배열로 나눌 수 있어야합니다.
tangent = np.array([1 / speed] * 2).transpose() * vel
print(tangent)
출력:
[[0.4472136 0.89442719]
[0.4472136 0.89442719]
[0.5547002 0.83205029]
[0.70710678 0.70710678]
[0.8 0.6 ]
[0.89442719 0.4472136 ]
[0.89442719 0.4472136 ]]
마찬가지로 이제 탄젠트의 구성 요소를 분리하고 기울기를 계산하여 법선 벡터도 찾을 수 있습니다.
이제 아래 코드에서 제공된 곡률 공식을 구현합니다.
ss_t = np.gradient(speed)
xx_t = np.gradient(x_t)
yy_t = np.gradient(y_t)
curvature_val = np.abs(xx_t * y_t - x_t * yy_t) / (x_t * x_t + y_t * y_t) ** 1.5
print(curvature_val)
출력:
[0. 0.04472136 0.17067698 0.26516504 0.256 0.17888544
0. ]
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn