
You are now following this question
- You will see updates in your followed content feed.
- You may receive emails, depending on your communication preferences.
plot some nodes from an .txt file
    4 views (last 30 days)
  
       Show older comments
    
Hi! I would like to hope if there is an easy way to plot only the outermost nodes (the red nodes in the figure). 
I am leaving the filename.txt file representing the nodes.

Accepted Answer
  Mathieu NOE
      
 on 1 Dec 2022
        hello Alberto
here you are ; use function boundary with shrink factor = 1

data = readmatrix('filename.txt');
x = data(:,1);
y = data(:,2);
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 1;
k = boundary(x,y,s);
plot(x,y, 'db', x(k), y(k), '-r')
25 Comments
  Alberto Acri
      
 on 1 Dec 2022
				Thanks for the reply @Mathieu NOE! However, I only wanted the plotting of those nodes (without the connecting line between the nodes). That is, to have only the red nodes in my figure and then report on the workspace the coordinates (x,y) of only the red nodes shown in the figure.
  Mathieu NOE
      
 on 1 Dec 2022
				hello 
It was displayed as lines because this is how I asked in the plot command '-r'
plot(x,y, 'db', x(k), y(k), '-r')  
but you can that to dots if your prefer 

also the x and y values that already defined as x(k) and y(k) but if you prefer we can name them x_out and y_out
data = readmatrix('filename.txt');
x = data(:,1);
y = data(:,2);
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 1;
k = boundary(x,y,s);
x_out = x(k);
y_out = y(k);
plot(x,y, 'db', x_out, y_out, '*r')
  Alberto Acri
      
 on 1 Dec 2022
				In case I have such a txt?
How can I do the same thing for the two geometries?
  Mathieu NOE
      
 on 1 Dec 2022
				hello again
here there is one "stupid" solution as we can see the two groups are separetd by a blank zone in the y range around y = 230
so you can tell which group of data we are dealing with depending of if it's above or below that line.
for more complex cases with multiple curves you may have to use more sophisticated tools like clustering or based on Image Processing like here : 
"stupid" code for the time being : 

% data = readmatrix('filename.txt');
data = readmatrix('filename_1.txt');
x = data(:,1);
y = data(:,2);
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 1;
%upper curve
idx = y>235;
x_temp = x(idx);
y_temp = y(idx);
k = boundary(x_temp,y_temp,s);
x_out1 = x_temp(k);
y_out1 = y_temp(k);
%lower curve
idx = y<=235;
x_temp = x(idx);
y_temp = y(idx);
k = boundary(x_temp,y_temp,s);
x_out2 = x_temp(k);
y_out2 = y_temp(k);
plot(x,y, 'db', x_out1, y_out1, '*r', x_out2, y_out2, '*c')
  Mathieu NOE
      
 on 1 Dec 2022
				a slight improvement, we compute the y threshold value , but that works only if the two curves have a vertical separation > 0 
% data = readmatrix('filename.txt');
data = readmatrix('filename_1.txt');
x = data(:,1);
y = data(:,2);
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 1;
% find the y threshold that separates the two curves 
% NB : it works only if there is a sufficient gap in the y direction (here
% we take 5 units separation in y distance
yy = unique(sort(y));
ind = find(diff(yy)>5);
val_low = yy(ind);
val_upper = yy(ind+1);
threshold = (val_low+val_upper)/2; % let's take the average of the two
%upper curve
idx = y>threshold;
x_temp = x(idx);
y_temp = y(idx);
k = boundary(x_temp,y_temp,s);
x_out1 = x_temp(k);
y_out1 = y_temp(k);
%lower curve
idx = y<threshold;
x_temp = x(idx);
y_temp = y(idx);
k = boundary(x_temp,y_temp,s);
x_out2 = x_temp(k);
y_out2 = y_temp(k);
plot(x,y, 'db', x_out1, y_out1, '*r', x_out2, y_out2, '*c')
  Alberto Acri
      
 on 2 Dec 2022
				I would like to ask you for one more help. If I wanted to use this code for both files (filename.txt & filename_1.txt) how can I do it?
  Mathieu NOE
      
 on 2 Dec 2022
				well 
I don't have yet a solution for detecting automatically how many closed curves you have 
the only simple solution I can suggest is to plot the raw data then ask the operator how many closed curves he  sees , then use that in the code to process 
or if you have a way to name your data according to how many curves they have (if you know it a priori)
  Alberto Acri
      
 on 2 Dec 2022
				
      Edited: Alberto Acri
      
 on 2 Dec 2022
  
			I will take your solution into consideration.
In the case where I have 4 curves, as in the 'filename_3.txt' case, how could I get the same results as above?
I tried with this code but there is some problem on identifying the parameters 'val_low' and 'val_upper'. 
data = readmatrix('filename_3.txt');
x = data(:,1);
y = data(:,2);
s = 1;
gap = 1;
xx = unique(sort(x));
ind_x = find(diff(xx)>gap);
val_low_x = xx(ind_x);
val_upper_x = xx(ind_x + 1);
threshold_x = (val_low_x + val_upper_x)/2; % let's take the average of the two
% upper curve
idx_x = x > threshold_x;
x_temp_x = x(idx_x);
y_temp_x = y(idx_x);
k_x = boundary(x_temp_x,y_temp_x,s);
x_out1 = x_temp_x(k_x);
y_out1 = y_temp_x(k_x);
% lower curve
idx_x = x < threshold_x;
x_temp_x = x(idx_x);
y_temp_x = y(idx_x);
k_x = boundary(x_temp_x,y_temp_x,s);
x_out2 = x_temp_x(k_x);
y_out2 = y_temp_x(k_x);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
yy = unique(sort(y));
ind_y = find(diff(yy) > gap);
val_low_y = yy(ind_y);
val_upper_y = yy(ind_y + 1);
threshold_y = (val_low_y + val_upper_y)/2; % let's take the average of the two
% upper curve
idx_y = y > threshold_y;
x_temp_y = x(idx_y);
y_temp_y = y(idx_y);
k_y = boundary(x_temp_y,y_temp_y,s);
x_out3 = x_temp_y(k_y);
y_out3 = y_temp_y(k_y);
% lower curve
idx_y = y < threshold_y;
x_temp_y = x(idx_y);
y_temp_y = y(idx_y);
k_y = boundary(x_temp_y,y_temp_y,s);
x_out4 = x_temp_y(k_y);
y_out4 = y_temp_y(k_y);
plot(x,y, 'db', x_out1, y_out1, '*r', x_out2, y_out2, '*r', x_out3, y_out3, '*r', x_out4, y_out4, '*r')
So I thought of separating the 4 curves into 4 quadrants with 4 for loops, but I don't have many ideas.
data = readmatrix('filename_3.txt');
x = data(:,1);
y = data(:,2);
s = 1;
% X-axis separation
X = 350; 
% Y-axis separation
Y = 240;
% Upper left quadrant
for x<X & y>Y
end
  Mathieu NOE
      
 on 2 Dec 2022
				This is a new code for this case 
maybe with a little more work we can detect how many distinct / non overlapping curves (with always the constrain that x and y gaps  > 0) 
this is just a first try :
% data = readmatrix('filename.txt');
data = readmatrix('filename_3.txt');
x = data(:,1);
y = data(:,2);
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 1;
% find the y threshold that separates the two curves 
% NB : it works only if there is a sufficient gap in the y direction (here
% we take 5 units separation in y distance
yy = unique(sort(y));
ind = find(diff(yy)>5);
val_low = yy(ind);
val_upper = yy(ind+1);
y_threshold = (val_low+val_upper)/2; % let's take the average of the two
% same approach to find x gap between left / right 
xx = unique(sort(x));
ind = find(diff(xx)>5);
val_low = yy(ind);
val_upper = yy(ind+1);
x_threshold = (val_low+val_upper)/2; % let's take the average of the two
%upper left curve
idx = x<x_threshold;
idy = y>y_threshold;
x_temp = x(idx & idy);
y_temp = y(idx & idy);
k = boundary(x_temp,y_temp,s);
x_out1 = x_temp(k);
y_out1 = y_temp(k);
%upper right curve
idx = x>x_threshold;
idy = y>y_threshold;
x_temp = x(idx & idy);
y_temp = y(idx & idy);
k = boundary(x_temp,y_temp,s);
x_out2 = x_temp(k);
y_out2 = y_temp(k);
%lower left curve
idx = x<x_threshold;
idy = y<y_threshold;
x_temp = x(idx & idy);
y_temp = y(idx & idy);
k = boundary(x_temp,y_temp,s);
x_out3 = x_temp(k);
y_out3 = y_temp(k);
%lower right curve
idx = x>x_threshold;
idy = y<y_threshold;
x_temp = x(idx & idy);
y_temp = y(idx & idy);
k = boundary(x_temp,y_temp,s);
x_out4 = x_temp(k);
y_out4 = y_temp(k);
plot(x,y, 'db', x_out1, y_out1, '*r', x_out2, y_out2, '*c', x_out3, y_out3, '*g', x_out4, y_out4, '*k')
  Alberto Acri
      
 on 2 Dec 2022
				Perfect!!! As always you have given me great solutions!
I'll try to see if I can create a unique code that can automatically detect how many curves there are and apply the above.
Consider that I have several images like these (see attachments) and it would be faster to have the computer do everything instead of applying a particular code one at a time. 
If you have any updates on how to proceed that is always welcome! 
  Mathieu NOE
      
 on 2 Dec 2022
				hello 
I am still chasing the perfect solution but maybe I need more than just the built in boundary function 
have to have a look at 
  Mathieu NOE
      
 on 2 Dec 2022
				hehe
finally got some luck... 
found this  excellent Fex submission : 
had to do a little bit of rework of the m functions and introduce the boundary plot in it and tada !!!
it works for all provided data files 
here's one example 

edit / run the main.m file and let the magic do the work ! 
zip attached
  Alberto Acri
      
 on 3 Dec 2022
				Thank you very much! You have given me a lot of help!
  Mathieu NOE
      
 on 5 Dec 2022
				As always, my pleasure !
  Mathieu NOE
      
 on 5 Dec 2022
				I have slightly changed the m files (attached) so you have the boudary points available in the workspace (' out ' array)
the data is now an output of PlotClusterinResult_mod.m
%% Load Data
% X = readmatrix('filename.txt'); % it works !!
% X = readmatrix('filename_1.txt'); % it works !!
% X = readmatrix('filename_2.txt'); % it works !!
% X = readmatrix('filename_3.txt'); % it works !!
X = readmatrix('filename_4.txt'); % it works !!
%% Run DBSCAN Clustering Algorithm
epsilon = 5;
MinPts = 2;
IDX=DBSCAN(X,epsilon,MinPts);
%% Plot Results
out = PlotClusterinResult_mod(X, IDX);
title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);
% double check 'out' data (boundary points) are now in the workspace
figure
plot(X(:,1),X(:,2),'d');
hold on
plot(out(:,1),out(:,2),'*k');
hold off
  Alberto Acri
      
 on 7 Dec 2022
				May I ask how to modify the code above considering the attached text files? The coordinates of the .txt files are different from those given at the beginning of the discussion. 
I wanted to know if there is a possibility to highlight only the outermost nodes as it was done for the previous cases because with the files "test_9.txt" and "test_222.txt" I get a wrong result. In figure I show you the comparison. Thank you very much.

X = readmatrix('test_9.txt');
% X = readmatrix('test_222.txt');
%% Run DBSCAN Clustering Algorithm
epsilon = 5;
MinPts = 2;
IDX=DBSCAN(X,epsilon,MinPts);
%% Plot Results
out = PlotClusterinResult_mod(X, IDX);
title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);
% double check 'out' data (boundary points) are now in the workspace
figure
plot(X(:,1),X(:,2),'d');
hold on
plot(out(:,1),out(:,2),'*k');
hold off
  Mathieu NOE
      
 on 8 Dec 2022
				hello 
ok, yes I noticed with the new files  that the matlab function boundary that we use here may sometims not give the expected results. 
I first tried to tweak the so called shrink factor but that does not give a robust method as you would have to tweak it for different data sets
Instead I tried to make a better boundary function, so here we have myboundary.m !! (see attachement, you need this new function is your path)
I have updated PlotClusterinResult_mod accordingly (in attachement too)
this is the result I get with test_9.txt

  Mathieu NOE
      
 on 8 Dec 2022
				FYI
attached are some results / comparison between boundary and myboudary for various txt files 
NB that myboudary does not require any tweaking (like the shrink factor in boundary
clc
clearvars
close all
data = readmatrix('filename.txt');
% data = readmatrix('test_9.txt');
% data = readmatrix('test_222.txt');
x = data(:,1);
y = data(:,2);
%% solution with matlab "boundary"
% you have to tweak the shrink factor to get the right result (maybe)
% k = boundary(___,s) specifies shrink factor s using any of the previous syntaxes.
% s is a scalar between 0 and 1. Setting s to 0 gives the convex hull,
% and setting s to 1 gives a compact boundary that envelops the points.
% The default shrink factor is 0.5.
s = 0.9;
k = boundary(x,y,s);
x_out = x(k);
y_out = y(k);
figure(1),
subplot(1,2,1),plot(x,y, 'db', x_out, y_out, '*r')
title(['with matlab "boundary", s = ' num2str(s)])
%% solution based on "tight boundary" but applied in both X and Y directions
%https://fr.mathworks.com/matlabcentral/answers/299796-tight-boundary-around-a-set-of-points
[x_selec,y_selec] = myboundary(x,y);
subplot(1,2,2),plot(x, y,'db',x_selec, y_selec,'*r')
title('with "myboundary"')
  Alberto Acri
      
 on 11 Dec 2022
				
      Edited: Alberto Acri
      
 on 11 Dec 2022
  
			Thank you for the response @Mathieu NOE. I had seen it in the other post as well! I also write here. Can I ask you for one last help? In the case of "particular" curves in attachment, the code with shrink_factor variation always leads to some small loss. Can you always get a good result as with other curves? Thank you very much! 
clc;
clear;
close all;
%% Load Data
X = readmatrix('test_1.txt');
% X = readmatrix('test_2.txt');
%% Run DBSCAN Clustering Algorithm
epsilon = 5;
MinPts = 2;
shrink_factor = 0.9;
IDX=DBSCAN(X,epsilon,MinPts);
%% Plot Results
out = PlotClusterinResult_mod(X, IDX, shrink_factor);
title(['DBSCAN Clustering (\epsilon = ' num2str(epsilon) ', MinPts = ' num2str(MinPts) ')']);
% double check 'out' data (boundary points) are now in the workspace
figure
plot(X(:,1),X(:,2),'d');
hold on
plot(out(:,1),out(:,2),'*k');
hold off
  Mathieu NOE
      
 on 12 Dec 2022
				
      Edited: Mathieu NOE
      
 on 12 Dec 2022
  
			hello Alberto 
I did another trial based on this FEX : 
and comparison of the already 2 previous solutions
this is the new code with 3 approaches  : 
plot for test_2.txt

code (see test3solutions.m in zip attached)
% test txt files : 
% filename.txt                  
% filename_1.txt                
% filename_2.txt                
% filename_3.txt                
% filename_4.txt                
% test_222.txt                  
% test_9.txt
% test_1.txt                    
% test_2.txt                    
data = readmatrix('test_9.txt');
x = data(:,1);
y = data(:,2);
%% test 1 : with DB cluster and  boundary (matlab native function)
shrink_factor = 1;
epsilon = 5;
MinPts = 2;
IDX=DBSCAN(data,epsilon,MinPts);
[x_out1,y_out1] = PlotClusterinResult_mod(data, IDX, shrink_factor); % myboundary
%% test 2 : withDB cluster and   myboundary (my previous suggestion)
epsilon = 5;
MinPts = 2;
out = PlotClusterinResult_mod2(data, IDX); % myboundary
%% test 3 : with find_delaunay_boundary03_fig1 
% (from Fex : https://fr.mathworks.com/matlabcentral/fileexchange/60690-boundary-extraction-identification-and-tracing-from-point-cloud-data?s_tid=ta_fx_results ) 
Fd = 1.5; %Fd = dmax (max point to point distance)
[bids, E, Ne] = find_delaunay_boundary03_fig1(data,Fd); 
%% plot
figure
subplot(1,3,1),plot(x,y, 'db', x_out1, y_out1, '*r')
title(['DB cluster w/ boundary, s = ' num2str(shrink_factor)]);
subplot(1,3,2),plot(x,y, 'db', out(:,1),out(:,2),'*r')
title('DB cluster w/ myboundary');
subplot(1,3,3),plot(x,y, 'db'),hold on
title('find-delaunay-boundary03-fig1');
for ck = 1:numel(bids)
    plot(x(bids{ck}), y(bids{ck}), '*r')
end
  Alberto Acri
      
 on 12 Dec 2022
				Two questions:
1) How can I save the matrix (rx2) of coordinates with the red *? I saw the cell "bids" but it contains a different number of rows (230x1 double and 210x1 double).
2) Is it possible to recover the coordinates that exist in the left figure but disappear in the right figure? You can see in the attached figure some nodes that disappear. 
  Mathieu NOE
      
 on 13 Dec 2022
				hello Alberto 
answers are in the code below 
yes we can combine the two last options to get best of both solutions 
hope it helps 

clc
clearvars
close all
% test txt files : 
% filename.txt                  
% filename_1.txt                
% filename_2.txt                
% filename_3.txt                
% filename_4.txt                
% test_222.txt                  
% test_9.txt
% test_1.txt                    
% test_2.txt                    
data = readmatrix('test_1.txt');
x = data(:,1);
y = data(:,2);
%% test 2 : with DB cluster and   myboundary (my previous suggestion)
epsilon = 5;
MinPts = 2;
IDX=DBSCAN(data,epsilon,MinPts);
out = PlotClusterinResult_mod2(data, IDX); % myboundary
%% test 3 : with find_delaunay_boundary03_fig1 
% (from Fex : https://fr.mathworks.com/matlabcentral/fileexchange/60690-boundary-extraction-identification-and-tracing-from-point-cloud-data?s_tid=ta_fx_results ) 
Fd = 1.5; %Fd = dmax (max point to point distance)
[bids, E, Ne] = find_delaunay_boundary03_fig1(data,Fd); 
x3 = [];
y3 = [];
for ck = 1:numel(bids)
    x3 = [x3; x(bids{ck})];
    y3 = [y3; y(bids{ck})];
end
%% combine both datasets and keep unique pairs
out_both = [out; [x3 y3]];
out_both = unique(out_both, 'rows');
%% plot 1 (zoom)
figure
subplot(1,3,1),plot(x,y, 'db', out(:,1),out(:,2),'*r')
xlim([100 160])
ylim([240 280])
title('DB cluster w/ myboundary');
subplot(1,3,2),plot(x,y, 'db', x3,y3,'*r')
xlim([100 160])
ylim([240 280])
title('find-delaunay-boundary03-fig1');
subplot(1,3,3),plot(x,y,'db', out_both(:,1),out_both(:,2),'*r')
xlim([100 160])
ylim([240 280])
title('combined sets');
%% plot 2 (full range)
figure
subplot(1,3,1),plot(x,y, 'db', out(:,1),out(:,2),'*r')
title('DB cluster w/ myboundary');
subplot(1,3,2),plot(x,y, 'db', x3,y3,'*r')
title('find-delaunay-boundary03-fig1');
subplot(1,3,3),plot(x,y,'db', out_both(:,1),out_both(:,2),'*r')
title('combined sets');
  Alberto Acri
      
 on 13 Dec 2022
				I have created a new question at this link about correct positioning of some coordinates. Since you gave me a lot of help with this question, maybe you can help me. :)
  Alberto Acri
      
 on 4 Jan 2023
				Hi @Mathieu NOE! Can I ask you again for your help? Using the attached files (the files you had attached previously), I noticed a "problem" with the file test_114_check.txt of which I also attach an image.

How can I do to extrapolate, even for this curve, only the outer coordinates? 
I thank you for your help in advance!
  Mathieu NOE
      
 on 4 Jan 2023
				
      Edited: Mathieu NOE
      
 on 4 Jan 2023
  
			hello Alberto
happy new year !!
for your problem above, simply increase Fd for the second method until you get the expected results 
file : code_v3.m
%% test 3 : with find_delaunay_boundary03_fig1 
% (from Fex : https://fr.mathworks.com/matlabcentral/fileexchange/60690-boundary-extraction-identification-and-tracing-from-point-cloud-data?s_tid=ta_fx_results ) 
% Fd = 1.5; %Fd = dmax (max point to point distance)
Fd = 3; %Fd = dmax (max point to point distance)
More Answers (1)
  Alberto Acri
      
 on 12 Jun 2024
        Hi @Mathieu NOE
I tried using the various functions to retrieve the outermost nodes for other types of curves like the ones attached. Of these the best would (probably) be the one attached.
Do you happen to know if there is a possibility to identify the 'Fd' parameter automatically so as to retrieve exactly the outer nodes?
Here is the code:
    %data
    PARAMETER = 0.2;
    % ===============
    x = data(:,1);
    y = data(:,2);
    % (from Fex : https://fr.mathworks.com/matlabcentral/fileexchange/60690-boundary-extraction-identification-and-tracing-from-point-cloud-data?s_tid=ta_fx_results ) 
    Fd = PARAMETER; %Fd = dmax (max point to point distance)
    [bids, E, Ne] = find_delaunay_boundary03_fig1(data,Fd); 
    x3 = [];
    y3 = [];
    for ck = 1:numel(bids)
        x3 = [x3; x(bids{ck})];
        y3 = [y3; y(bids{ck})];
    end
    nodes_ext_2D = [x3, y3];
    figure
    plot(data(:,1),data(:,2),'r.','MarkerSize',10);
    hold on
    plot(nodes_ext_2D(:,1),nodes_ext_2D(:,2),'k.','MarkerSize',10);
    hold off
Here two examples: on the left a 'simple' curve but I can't retrieve all the outer nodes; on the right a more complicated case.

1 Comment
  Mathieu NOE
      
 on 12 Jun 2024
				hello again 
I tried a few things , but it seems we are always a bit loo low or too high, so either we pick too many points or not enough (so we get this small gaps as you show on the left picture). I am not sure there is a magical way to solve that issue - or we need another approach , like how to identify the inner zig zags and remove them.
here what I have tried , based on the averaged distance between points and defining the Fd value from there.
with data_1 it works well , for other cases it's not so good

%data
    % ===============
    data = data_7;
    x = data(:,1);
    y = data(:,2);
    % Execute boundary
    k=boundary(x(:),y(:),1);
    xk = x(k);
    yk = y(k);
    dx = mean(abs(diff(xk)));
    dy = mean(abs(diff(yk)));
    dr = sqrt(dx.^2 + dy.^2);
    PARAMETER = 5*dr;
%     dx = max(abs(diff(x)));
%     dy = max(abs(diff(y)));
%     dr = sqrt(dx.^2 + dy.^2);
%     PARAMETER = 10*dr;
    % (from Fex : https://fr.mathworks.com/matlabcentral/fileexchange/60690-boundary-extraction-identification-and-tracing-from-point-cloud-data?s_tid=ta_fx_results ) 
    Fd = PARAMETER; %Fd = dmax (max point to point distance)
    [bids, E, Ne] = find_delaunay_boundary03_fig1(data,Fd); 
    x3 = [];
    y3 = [];
    for ck = 1:numel(bids)
        x3 = [x3; x(bids{ck})];
        y3 = [y3; y(bids{ck})];
    end
    nodes_ext_2D = [x3, y3];
    figure
    plot(data(:,1),data(:,2),'r.','MarkerSize',10);
    hold on
    plot(xk,yk,'g*','MarkerSize',10);
    plot(nodes_ext_2D(:,1),nodes_ext_2D(:,2),'k.','MarkerSize',10);
    hold off
    legend('raw data','boudary S = 1','delaunay boudary');
See Also
Categories
				Find more on Construction in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!An Error Occurred
Unable to complete the action because of changes made to the page. Reload the page to see its updated state.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom(English)
Asia Pacific
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)

