На построенном графике я хотел бы знать область с максимальным треугольным пересечением

У меня есть код ниже, чтобы связать девять различных координат в построенном графике:

A1={[1, 1; 1, 5; 3, 9; 4, 2; 4, 6; 6, 2; 7, 6; 6, 9; 9, 9]};
A = cell2mat(A1);
figure
plot(A(:,1),A(:,2),'oc','LineWidth',2,'MarkerSize',5);
axis([0 10 0 10]);
xlabel('X-Coordinates')
ylabel('Y-Coordinates')
grid on
hold on
for ii = 1:size(A, 1) - 1
    for jj = ii + 1:size(A, 1)
        line([A(ii, 1), A(jj, 1)], [A(ii, 2), A(jj, 2)])
    end
end

Связи образуют различные треугольники. Моя проблема в том, что я хотел бы знать регион с наибольшим количеством треугольных пересечений.

Может кто-нибудь помочь с этой проблемой? Спасибо

1 ответ

  1. Код ниже ответил на мой вопрос:

    A1={[1, 1; 1, 5; 3, 9; 4, 2; 4, 6; 6, 2; 7, 6; 6, 9; 9, 9]};
    A = cell2mat(A1);
    k = boundary(A);
    hold on;
    plot(A(:,1),A(:,2),'oc','LineWidth',2,'MarkerSize',5);
    axis([0 10 0 10]);
    xlabel('X-Coordinates')
    ylabel('Y-Coordinates')
    grid on
    
    
    for ii = 1:size(A, 1) - 1
        for jj = ii + 1:size(A, 1)
            line([A(ii, 1), A(jj, 1)], [A(ii, 2), A(jj, 2)])
        end
    end
    
    % Create the combination of all points that make the triangles
    % This could be used to plot the lines as well
    N = size(A,1);
    comb = [];
    for i = 1:N-2
        for j = i+1:N-1
            comb = [comb; repmat([i j], N-j,1) (j+1:N)']; %#ok<AGROW>
        end
    end
    nComb = size(comb,1);
    
    % Create a mesh grid
    dg = 0.01; % Resolution - tune this!
    gridEdge = [min(A);max(A)];
    [X, Y] = meshgrid(gridEdge(1,1):dg:gridEdge(2,1), gridEdge(1,2):dg:gridEdge(2,2));
    
    % Check if a point is inside each triangle
    [isInside, onEdge] = deal(zeros(numel(X),nComb));
    for i = 1:nComb
       [isInside(:,i), onEdge(:,i)] = inpolygon(X(:),Y(:),A(comb(i,:),1),A(comb(i,:),2));
    end
    % Remove points on edge
    isInside = isInside - onEdge; 
    
    % Get index of points with most intersection
    inTri = sum(isInside,2);
    idx = find(inTri == max(inTri));
    
    % Plot result
    hold on
    plot(X(idx),Y(idx),'.')
    text(mean(X(idx)),mean(Y(:)),num2str(max(inTri)),'FontSize',20)
    

    Большое спасибо nilZ0r.