2개의 임의의 3차원 Polyline 가 얼마나 비슷한지 비교하는 방법?
글쓴이: kleinstein / 작성시간: 금, 2012/10/26 - 8:25오후
여러분의 아이디어를 좀 들어보고 싶어서 이렇게 질문글을 올립니다.
3차원 공간상에 2개의 임의의 Polyline 이 있을때,
이 두개의 Polyline 이 얼마나 비슷하게 생겼는지 비교하고 싶습니다.
어떻게 하는게 가장 좋을까요?
참고로 Polyline 은 3차원 좌표값들의 vector 로 저장되어 있습니다.
좋은 아이디어 없을까요?
Forums:
일단 "비슷함"을 정의해야겠죠.
일단 "비슷함"을 정의해야겠죠. "합동congruence"을 원하시는 건지 "닮음similarity"을 원하시는 것인지에 따라 내용이 달라질 수 있습니다.
가장 간단하게는 이리 돌리고 저리 돌려보면서 (닮음의 경우에는 늘리거나 줄이기도 하면서) 딱 들어맞는지, 얼마나 들어맞는지 조사하는 것이겠죠.
그럼, n개의 3차원 벡터를 3n차원 벡터로 생각합니다.
대조군이 되는 A벡터는 가만히 두고, 이 벡터에 대한 비교군 B벡터의 "거리"를 정의합니다. 이 거리는 합동인 경우에는 유클리드 거리를 쓰고, 닮음인 경우라면 사영기하학의 거리를 써야겠죠.
그리고 B벡터를 공간 전체에서 전부 돌려보는데, 3n차원이니까 3n개의 매개변수 공간에서 돌아다녀야겠죠.
어쨌든, 거리가 최소가 되는 매개변수를 찾고, 그때의 최소 거리를 우리가 찾는 "비슷함"이라고 정의합니다.
피할 수 있을때 즐겨라! http://melotopia.net/b
polyline이라고 하니까 닫힌 선은 아니겠죠?
polyline이라고 하니까 닫힌 선은 아니겠죠? 닫힌 선이라면 n개의 벡터에 대해서 한바퀴 돌려가면서 다 대입해보고 거꾸로 한번 더 돌려서 대입해보는 열린선으로 생각해도 됩니다. 열린 선이라면 정방향 역방향 한번씩만 대입해보면 되겠죠.
여기서 일단 비슷함을 합동으로 정의합니다.
2개의 직선으로만 이루어진 도형이 얼마나 비슷한가 알아본다면, 두 선분이 길이가 비슷한지 봐야 하고, 두 선분 사이의 각도가 비슷해야 합니다.
즉 a와 b를 벡터라 치고, t는 두 벡터 사이의 각도라 한다면, (a, b, t)와 (a', b', t')이 얼마나 비슷한지 조사합니다. 그리고 (a, b, t)와 (b', a', t')가 얼마나 비슷한지 조사합니다. 합동을 목표로 한다면, (a, b, t)와 (a', b', t')사이의 유클리드 거리를 측정하면 되겠죠.
여기서 a, b는 본문에서 물어보신 polyline을 적어도 어느 한쪽 끝점이 원점에서 시작하도록 평행이동 한 벡터를 나타냅니다. (a1, a2, ..., an)이라면 3n차원 벡터로 나타낸 값이 됩니다. 이때 t는 2(n-1)개의 각도들을 숫자로 쓴 것이 되겠죠. 3차원에서는 방향을 표시하려면 2개의 각도가 필요하므로 각도는 n-1의 2배가 필요합니다.
만약 비교해야 하는 polyline을 구성하는 벡터의 수가 서로 다르다면, 한쪽 끝에서 한칸씩 옮겨가며 겹쳐보면서 재야되겠네요.
피할 수 있을때 즐겨라! http://melotopia.net/b
댓글 달기