Select a point on the graph
    7 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hi given the following code, 
figure(1);
scatter(x(:,1),x(:,2));
hold on;
scatter(member_value(:,1),member_value(:,2),'r');
legend({'Data','Pareto Frontier'})
I obtain a graph like this 

And I want to select the red point that is closest to the origin. 
May someone help me with the code?
2 Commenti
  Adam
      
      
 il 9 Ott 2019
				What do you mean by 'select' it?  You can click on it and select it if you wish, but that depends what you want to do having 'selected' it.
If you mean programmatically find it then isn't it just a simple case of pythagoras, having subtracted your origin from all points? (Or some built-in distance function that does the maths for you anyway)
Risposta accettata
  Adam Danz
    
      
 il 9 Ott 2019
        
      Modificato: Adam Danz
    
      
 il 9 Ott 2019
  
      To find the coordinate closest to the origin (0,0), 
d = hypot(member_value(:,1),member_value(:,2)); 
[~, minIdx] = min(d); 
plot(member_value(minIdx,1),member_value(minIdx,2),'ks','MarkerSize',12);
hypot() method avoids potential under/overflow: https://www.mathworks.com/help/matlab/ref/hypot.html
8 Commenti
  Adam Danz
    
      
 il 9 Ott 2019
				
      Modificato: Adam Danz
    
      
 il 9 Ott 2019
  
			Let's say you have 4 coordinates (black dots, below).  
Each of those coordinates forms a right-triangle where 1 side of the triangle is the 'x-coordinate and the other side of the triangle is the y-coordinate.  The hypotenuse of the triangle is the line that extends from (0,0) to the dot.  
hypot() inputs are the x and y coordinates which are the sides of each triangle.  It outputs the length of the hypotenuse which is the distance of the dot from (0,0).   The hypotenuse are the diagonal lines in the image below. 

Hypotenuse demo code for the image above:
clf()
x = rand(4,2).*8+1;
scatter(x(:,1),x(:,2));
hold on;
axis equal
xlim([0,9])
ylim([0,9])
grid on
leg = plot(x(:,[1,1])', [x(:,2),zeros(size(x,1),1)]', '-','LineWidth',2);
hyp = plot([x(:,1),zeros(size(x,1),1)]', [x(:,2),zeros(size(x,1),1)]', '-','LineWidth',2);
set(hyp,{'Color'},{leg.Color}')
d = hypot(x(:,1),x(:,2)); 
labels = strsplit(sprintf('h=%.1f\n',d'));
t = text(x(:,1)-.2,x(:,2),labels(1:end-1),'HorizontalAlignment','right');
Più risposte (1)
  Turlough Hughes
      
 il 9 Ott 2019
        You can do the following:
[~,ind]=min(sqrt(member_value(:,1).^2+member_value(:,2).^2)); %find index for point closest to origin
hold on; plot(member_value(ind,1),member_value(ind,2),'.k');
Note, that if x was arranged as a row vector this will not work, but this is not the case for you.
0 Commenti
Vedere anche
Categorie
				Scopri di più su Computational Geometry in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




