2013-12-10 5 views
6

일부 2D 흩어져있는 데이터의 값을 보간하는 방법을 찾고 있습니다. 중간 점을 보간하고자하는 지형을 나타내는 3d 점이 있습니다. 입력 (X, Y) 좌표의 경우 Z (높이) 값이 필요합니다.분산 된 데이터의 2 차원 값 보간

This article on wikipedia 또한 내 소원을 이해하는 데 도움이 될 수 있습니다. matlab에 triscateredinterp이라는 라이브러리가 있습니다. 내가 원하는대로한다고 생각합니다.

C++에서이 보간을 수행하는 간단한 방법은 무엇입니까?

+0

은 2D 입력에 대한 데이터 고도입니까? 규칙적인 격자에 있거나 흩어져 있습니까? – Michael

+0

3D 점이 흩어져 있습니다. 내 데이터는 고도입니다. – mitjap

+0

당신은 ** 2D ** 값을주고 고도를 보충하고 싶습니까? – Michael

답변

1

3D 보간 (triscateredinterp)이 필요하지 않다고 생각합니다. 2D 입력을 기반으로하는 데이터가 있습니다. 3 차원이 출력됩니다. 올바르게 이해했다면 원래 점 사이의 어떤 점을 제공하고 값을 보간하고 싶습니다.

가벼운 가중치 가장 가까운 이웃! 그런 다음 쌍 선형 보간 다음에 이중 입방체 등. 첫 번째는 다른 사람이 수학의 증가 금액을 요구, 간단

양성 선형 :.

lat long Altitude 
X1 Y1 A1 
X2 Y2 A2 
X3 Y3 A3 

은이 행렬을 확인 : 각 지점은 보간 될 경우, 가까운 3 점 당신의 X 및 Y 발견 :

X1 Y1 1      A1 
X = X2 Y2 1     Y = A2 
    X3 Y3 1      A3 
,363,210

B 우리가 그 세 가까운 점을 계산한다 (상기 영역의 모든 점에 대해 재사용 될 수있다), 보간 계수

B1 
B = B2 
    B3 

매트릭스 식이다 : X*B = Y

넌있을 힘을 사용하십시오 : 양쪽에 XT를 곱하십시오. XT*X*B = XT*Y
XT * X의 역행렬을 취합니다 : B = (XT*X)^-1 *XT*Y.

예 3x3 행렬 반전. 이 문제를 C++ 문제로 되돌리려면, 행렬 연산에 Boost를 사용할 수 있습니다. 방법 것 (Solving a system of equations programmably?

한 문제를 양방향 선형 기술에서 발생할 수있는 삽입 된 점은 3 개 값의 다른 세트에 가까워 질수록 당신은 몇 가지 점프를 얻을 수 있다는 것입니다 : 여기

는 다른 유사한 C++ 질문 당신은 안장 구성에서 4 점을 보간합니까?)

+0

답변 해 주셔서 감사합니다. 저는 행렬 곱셈과 C++에 익숙합니다 :) 저는 약간 혼란 스럽습니다. 계산 될 때 벡터 B로 무엇을해야합니까?. _ 새로운 값을 얻기 위해 보간 할 점 좌표를 어떻게 사용합니까?_ 솔루션은 가장 가까운 3 점에 평면을 맞추고 교차점이 우리가 찾는 값인 수직선과 교차하는 것입니까? – mitjap

+1

B가 솔루션입니다. 어떤 X와 Y가 A = X * B1 + Y * B2 + B3을 찾기 위해 작동 할 수있는 공식의 계수. 원래 3 점과 교차하는 평면의 수식입니다. – Michael

+0

당신이 언급했듯이,이 솔루션은 연속적이지 않으므로, 분산 된 포인트가 무엇이 좋은지 잘 모르겠습니다. 점을 포함하는 삼각형의 3 개의 꼭지점을 가장 가까운 3 개의 점으로 대체합니다. 점의 삼각 측량 (예 : Delaunay) 삼각형을 가지고 있다고 가정하면 연속 보간을 할 수 있습니다. 그러면 더 많은 옵션이 열립니다. –

1

분산 점에 대한 좋은 방법 중 하나는 자연 네이버 보간법입니다. 예를 들어 CGAL에서 사용할 수있는 구현을 확인할 수 있습니다. http://doc.cgal.org/latest/Interpolation/index.html

+0

링크가 답이 아닙니다. SO에 대한 답변은 자체 포함될 것으로 예상됩니다. [이 메타 질문을 검토하십시오.] (http://meta.stackexchange.com/q/8231/135887) 및 외부 링크를 완전히 신뢰할 수 없도록 충분한 정보를 추가하십시오. – Charles

+0

글쎄, 나는 더 자세한 내용은 신경 쓰지 않겠지 만, 이것이 질문에 관한 것이라고 생각하지 않습니다. 사실, 제 대답은 그다지 연관성이 아니라 오히려 "자연스러운 이웃 보간법"이라는 단어였습니다. 또한 실제 질문은 기능을 제공하는 C++ 라이브러리를 찾는 것입니다. 링크는 정확한 대답입니다. –

+0

한숨, 리뷰를 할 때 질문을 읽는 것을 잊지 마십시오. 도서관 권고안은 SO 주제에 관한 주제가 아니며 질문을 마무리하기 위해 투표했습니다. 이 라이브러리를 사용하여 문제를 해결하는 방법에 대한 샘플 코드를 적어도 제공 할 수 있다면 도움이 될 것입니다. – Charles