2013-05-30 3 views
0

내가, MATLAB에서 점 세트와 그것의 부분 집합이라는 앵커 포인트를 걸리는 알고리즘을 알고리즘을 구현하기 위해 노력하고, 알고리즘의 작업은 다음과 같이MatLab에서 재귀 적으로 수정 된 배열을 반환하는 방법은 무엇입니까?

  1. 가 먼 두 앵커 포인트를
  2. 분할 찾기 각 그룹은 하나의 고정 점
  3. 복귀 한 앵커 지점
이있는 그룹이 될 때까지 가장 가까운 앵커 포인트 재귀
  • 에 각 지점을 연결하여 두 그룹으로 포인트는 과정을 반복

    문제는 MatLab이 그룹을 공식화하더라도 올바른 방법으로 배열을 반환 할 수는 없지만 참조로 배열을 수정할 수 없다는 것입니다.

    어떻게이 문제를 극복 할 수 있습니까 ??

    function [part1, part2, part1anchors, part2anchors] = iterativeSpletting(points, anchors) 
    dist = @(a, b) ((a.xd - b.xd)^2 + (a.yd - b.yd)^2)^0.5; 
    
    %find farthest two anchors 
    [ch1, ch2] = FarthestPoints(anchors); 
    
    %find parts 
    for i = 1:numel(points) 
        if (dist(points(i), ch1) <= dist(points(i), ch2)) 
         part1 = [part1, points(i)]; 
        else 
         part2 = [part2, points(i)]; 
        end 
    end 
    
    %assing anchors to parts 
    for i = 1:numel(anchors) 
        if (dist(anchors(i), ch1) <= dist(anchors(i), ch2)) 
         part1anchors = [part1anchors, anchors(i)]; 
        else 
         part2anchors = [part2anchors, anchors(i)]; 
        end 
    end 
    
    if numel(part1anchors) == 1 
        %how to return the part  
    else 
        iterativeSpletting(part1, part1anchors) 
    end 
    
    if numel(part2ch2) == 1 
        %how to return the part 
    else 
        iterativeSplitting(part2, part2anchors) 
    end 
    end 
    
  • +0

    당신이 – bla

    +0

    예 확인 ... 시도 무엇을 우리에게 보여 (matlab에 일반적으로 불필요한 복사를 방지하기 위해 최적화) , 고마워, 고마워. – Hani

    답변

    1

    클로저는 참조를 기준으로 캡처됩니다 :

    다음은 내 코드입니다. 당신이 반복적으로 하나 개의 큰 배열을 수정하려는 경우에는 다음과 같이 코딩 할 수 있습니다 : 또한 잘 작동

    function MyArray = foo() 
        MyArray = zeros(1, 100); 
        function bar(l, r) 
         if l < r 
          MyArray(l:r) = MyArray(l:r) + 1; 
          bar(l+1, r - 1); 
         end 
        end  
        bar(1, 100);   
    end 
    

    A = f(A)

    관련 문제