2014-11-21 3 views
-1

저는 n 차원의 점을 가지고 있으며 거리 r의 모든 이웃을 얻고 싶습니다.matlab을 사용하여 distance x의 모든 점 x를 구하십시오.

matlab에는 후보 집합에서 거리 r의 이웃을 얻기 위해 rangesearch()가 있지만, 제 문제에서는 후보 집합이 없습니다.

이 작업을 수행 할 수있는 MATLAB 코드가 있습니까?

감사합니다.

이 볼 내에있는 점의 하위 집합을 만들고 싶습니다. 예를 들어, 점 (3,1)과 반지름 r이 5이므로 모든 점을 r (5) 내의 점 (3,1)으로 찾고 싶습니다. 증분은이 경우 1이 될 수 있습니다. 즉, 가능한 답은 point (4,1), (3,2), (5,1)이 될 수 있습니다.

+0

이웃의 점을 중심으로 반경 r의 볼이다. 'rangesearch'는이 볼 안에있는 주어진 점의 부분 집합을 반환합니다. 그래서 후보자가 없다면 "그 모든 동네"를 얻는 것이 무엇을 의미합니까? – KQS

+0

@ user1877862이 볼 안에있는 점의 하위 집합을 만들고 싶습니다. 예를 들어, 점 (3,1)과 반지름 r이 5이므로 모든 점을 r (5) 내의 점 (3,1)으로 찾고 싶습니다. 증분은이 경우 1이 될 수 있습니다. 즉, 가능한 답은 point (4,1), (3,2), (5,1)이 될 수 있습니다. – user1964417

답변

1

ndgrid을 사용하여 후보 세트를 만들 수 있습니다. 2-D 예제에서 간격이 1 인 격자 점을 원합니다.

xrange = -10:10; 
yrange = -10:10; 
[X, Y] = ndgrid(xrange, yrange); 

이렇게하면 점의 2 차원 행렬이 두 개 생성됩니다.

candidate_set = [X(:), Y(:)]; 

을 그리고 당신은 당신의 선택 지점의 반경 내에있는 다음의 어느 찾을 rangesearch를 호출 할 수 있습니다 : rangesearch 예상하는 형식으로 그것을 얻을이 셀 어레이 (반환

test_pt = [3, 1]; 
radius = 5; 
idx = rangesearch(candidate_set, test_pt, radius); 

각 테스트 포인트에 대해 하나의 요소). 귀하의 경우에는, 당신은 단지 하나의 테스트 포인트를, 그래서 우리는 idx{1}에만 관심이있어 :

neighborhood = candidate_set(idx{1}, :); 

하나 더 참고 : 우리는 후보 세트를 생성에 대해 좀 더 영리한 수 있습니다. 우리는 이웃이 테스트 포인트 중심으로 하이퍼 큐브에 의해 제한된다는 것을 알고, 그래서 우리는 후보 세트로 하이퍼 큐브에서 포인트를 사용하여 시작할 수 :

range_min = test_pt - radius; 
range_max = test_pt + radius; 

을 그리고 우리는에서 후보 세트를 구성 할 수 있습니다 이 범위 : 치수의 임의의 수에

xrange = ceil(range_min(1)):floor(range_max(1)); 
yrange = ceil(range_min(2)):floor(range_max(2)); 
[X, Y] = ndgrid(xrange, yrange); 
candidate_set = [X(:), Y(:)]; 

:

nDims = length(test_pt); 
grid_vecs = cell(nDims, 1); 
grid_mats = cell(nDims, 1); 
for ii = 1:nDims 
    grid_vecs{ii} = ceil(range_min(ii)):floor(range_max(ii)); 
end 
[grid_mats{:}] = ndgrid(grid_vecs{:}); 
for ii = 1:nDims 
    grid_mats{ii} = grid_mats{ii}(:); 
end 
candidate_set = horzcat(grid_mats{:}); 
+0

고마워요! 이것은 내가 원하는 것입니다! – user1964417

관련 문제