2014-12-14 4 views
1

3D 스플라인 보간에 사용할 수있는 코드와 알고리즘에 대해 혼동스러워합니다. 내 응용 프로그램에는 경로가 필요합니다. 3D 공간에 정의 된 점이 있으면 스플라인 함수 (입방체, 베 지어 등)를 사용하여 보간해야합니다. 인터넷에 대한 연구는 나에게 해결책을주지 못했고 혼란 만 일으켰습니다.3D 공간에서 스플라인 보간에 대해 혼란 스럽습니다.

이 알고리즘은 내 관심을 끌었습니다 algorithm. 그것은 일부 3D 점 (MATLAB을 사용하여) 정의 :

[X, Y, Z] = meshgrid(x, y, z); 

을 다음 MATLAB 보간 함수를 호출

s = exp(-sqrt(X.^2 + Y.^2 + Z.^2)); 

sinterp = interp3(x, y, z, s, 0., 0., 0.) 

함수에 대한 무엇입니까!? 보간은 명확하게 3 점을 필요로합니다. 이 기능은 무엇입니까?

저는 C++ 프로그래머이므로 다음과 같은 유용한 기능을 제공하는 alglib 라이브러리를 사용하려고했습니다. 그러나 3 점이 충분하지 않아도 모르는 기능을 호출해야합니다.

내 응용 프로그램에서 3D 점은 다음과 같이 공간에 임의로 흩어져 있습니다. picture. 내 문제는 포인트에 합류하기위한 기능이 필요하다고 생각하지 않습니다. 비록 내가 그것을 필요로하더라도, 나는 그것을 정의하는 방법을 모른다.

어떻게이 문제에 접근하고 있습니까? 잘못된 라이브러리 함수를 사용하고 있습니까? 또는 스플라인 생성을위한 함수를 가지고 있어야합니까? 그렇다면 어떻게해야이 기능을 사용할 수 있습니까?

안부

답변

1

interp3()은 용적 데이터 포인트 (사이, 이순신 닫아, 실리콘), I = 1 ~ N에 대한 보간을 수행하도록되어있다. 함수 S = f (X, Y, Z)를 생성합니다. 이것은 게시물에 명시된대로 추가 입력이 필요한 이유입니다.

보간 문제/알고리즘을 발견하면 가장 먼저 알아야 할 사항은 찾고있는 기능의 종류입니다. 즉, 함수가 단일 변 수 (y = f (x)), 이변 수 (z = f (x, y)) 또는 다 변수 (s = f (x, y, z, ...))인지 여부. 스플라인을 사용하여 일련의 3D 점을 보간하려는 특정 문제의 경우 기본적으로 단변 보간 문제입니다. 그러나 공간 곡선은 y = f (x)로 표현 될 수 없으므로 스플라인 함수는 S (t) = (x (t), y (t), z (t))와 같은 매개 변수 형식으로 나타납니다.

3D 데이터 포인트를 통해 스플라인 보간을 수행하는 데는 여러 가지 방법이 있습니다. 그 중에서도 구현하기 쉬운 두 알고리즘은 Catmull Rom 스플라인과 Overhauser 스플라인입니다. 둘 다 큐빅 스플라인이며 데이터 요소의 첫 번째 파생어가 어떻게 추정되는지 만 다릅니다. 당신은 그 (것)들을 세부 사항을 찾기 위하여 google 할 수있다.

+0

'오버 하우저 (Overhauser)의 spline', 그 전에 들어 본 적이 없어요. – zionpi

+0

당신은 더 상세한 설명을 볼 용어를 구글 수 있습니다. 일부 웹 사이트에서는 Overhauser 스플라인과 Catmull Rom 스플라인이 똑같은데 잘못된 것이라고 말합니다. 그러나 그들은 둘 다 cubic Hermite 곡선이고 첫 번째 미분이 어떻게 추정되는지에 의해서만 다릅니다. – fang

1

혼동하지 마십시오. 당신이 제공 한 matlab 예제는 3D 공간의 점들 사이에 선을 보간하는 것과 관련이 거의 없거나 전혀 없습니다. 또한 s는 상징적 인 함수가 아니라 스칼라 값의 3D 행렬입니다.

이 MATLAB 예제에서는 3 개의 3D 행렬 (X, Y, Z)을 생성합니다. 각각은 배열 차원 x, y, z로 지정된 각 차원의 "샘플 평면"에 대한 3-D 격자의 점 중 x, y 또는 z 구성 요소를 각각 보유합니다.

그런 다음 각 격자 점에 대해 f=exp(-sqrt(x^2 + y^2 + z^2)) 함수가 계산되고 결과는 s (다른 3D 행렬)에 저장됩니다. 그래서 f은 스칼라 함수이며, 스칼라 값을 3D 공간의 점에 매핑하고 s은 평가 된 결과를 저장합니다.

마지막으로 (0,0,0) 점에서 f의 값은 (0,0,0) 근처의 격자 점에 대한 계산 된 값에서 외삽됩니다.

불행하게도, 난 당신이 실제로 무엇을 달성하고자 할 것입니다, 그러나 다시 적절한 C++ 라이브러리를 가리킬 수 없습니다 :이 예제 (또는 다른 MATLAB 예) 혼동되지 않습니다
때문에) 다른 문제입니다.
B) Matlab의 구문은 C와 매우 다르므로 이러한 예제를 잘못 해석하기 쉽습니다.

+0

감사합니다. 마이크, 내가 할 수있는 한 대답으로 질문을 표시 하겠지만 한 번만 할 수 있습니다. 어쨌든 당신의 제안은 좋게 들립니다. 감사합니다 – Dave

0

파라 메트릭 곡선 t 독립 파라미터 형태 X = Fx(t), Y = Fy(t), Z = Fz(t)을 가지며 F 세 연속 함수이다. 이것은 임의의 수의 차원으로 일반화됩니다.

베 지어의 경우 F은 번스타인 다항식에 제어점의 각 좌표를 곱한 값으로 정의됩니다. 예를 들면, 베 지어 사절이 cubic spline의 경우

X = P0x (1-t)² + 2 P1x (1 - t)t + P2x t² 
Y = P0y (1-t)² + 2 P1y (1 - t)t + P2y t² 
Z = P0z (1-t)² + 2 P1z (1 - t)t + P2z t² 

되면, F는 장 사이의 연속성을 보장하는 방식으로 유도체 (접선 벡터) 미트 인터폴레이션을 사용하여 계산 구분 정의된다.

실제로 공간에서 곡선 보간은 3 개의 독립적 인 1D 보간으로 볼 수 있습니다.

는 (데이터 포인트의 위치와 독립적 인 매개 변수 t이 계산되는 방식 사이의 종속성이있을 때이 더 완전히 사실입니다.)

+0

당신의 설명을 주셔서 감사합니다 이브 ...하지만 당신의 설명이 내 질문에 어떻게 대답 할 것이라고 생각합니까? – Dave

관련 문제