기존 답변은 종점이 임의적이지 않다는 점을 고려하지 않습니다. 따라서 곡선의 진 직도를 측정 할 때는 끝점을 사용하는 것이 적합하지 않습니다 (예 : 예상 길이, 각도, 위치 계산). 간단한 예는 양쪽 끝이 꼬인 직선입니다. 커브와 끝점 사이의 직선으로부터의 거리를 사용하여 측정하는 경우, 우리가 그린 직선이 끝점 사이의 직선에서 오프셋되므로 상당히 커집니다.
커브가 얼마나 직선인지 어떻게 알 수 있습니까? 곡선이 충분히 매끄럽다 고 가정하면 평균적으로 곡선에 접하는 양이 얼마나 변하는 지 알고 싶습니다. 선의 경우이 값은 0입니다 (접선이 일정하므로).
시간 t에서의 위치를 (x (t), y (t))로한다면, 탄젠트는 (Dx (t), Dy (t))이며, 여기서 Dx (t)는 시간 t에서의 x의 도함수입니다 (이 사이트에는 TeX 지원이없는 것 같습니다). 곡선이 호 길이로 매개 변수화되지 않은 경우 || (Dx (t), Dy (t)) ||로 나누어 정규화합니다. 우리는 시간 t에서 커브에 접하는 단위 벡터 (또는 각도)를가집니다. 따라서 각도는 a (t) = (Dx (t), Dy (t)) / || (Dx (t), Dy (t)) ||
그런 다음 곡선을 따라 적분 된 || Da (t) || ^ 2에 관심이 있습니다.
커브가 아닌 이산 데이터 포인트가있을 가능성이 크므로 유한 차이를 사용하여 미분 값을 근사화해야합니다. 따라서 Da (t)가됩니다 (a(t+h)-a(t))/h
. 그리고 a (t)가됩니다 ((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)/||((x(t+h)-x(t))/h,(y(t+h)-y(t))/h)||
. 그런 다음 h||Da(t)||^2
모든 데이터 포인트 를 합산 하고 곡선 길이로 정규화하여 S를 얻습니다 . 아마도 우리는을 사용 h=1
하지만 실제로는 임의의 스케일 요소 일뿐입니다.
다시 말하면, S는 라인에 대해 0이되고 라인에서 벗어날수록 커집니다. 필요한 형식으로 변환하려면을 사용하십시오 1/(1+S)
. 스케일이 다소 임의적이라고 가정하면 S에 양수를 곱하거나 (또는 다른 방식으로 변환, 예를 들어 S 대신 bS ^ c 사용) 특정 곡선이 얼마나 직선인지 조정할 수 있습니다.