Easiest way to create a line from 2 XY coordinates
    10 views (last 30 days)
  
       Show older comments
    
    Lina Koronfel
 on 24 Feb 2022
  
    
    
    
    
    Commented: Lina Koronfel
 on 1 Apr 2022
            What is the fastest way or the best way to transfer these values to an array to obtain an output that is the distance between Point(X1,Y1) and Point(X2,Y2) for every iteration? The original data is 300,000 iterations, so I want to end up with a vector of 300,000 distance values
Iter 	X1	        Y1		        X2	        Y2
0	125.1673584	13.18046188		194.4534607	176.9597931
1	126.4874725	13.56817341		196.5686646	176.3899078
2	125.1508484	13.18618774		196.9122314	175.5451508
3	125.8279877	12.93647861		195.5947876	176.2555695
0 Comments
Accepted Answer
  Scott MacKenzie
      
 on 24 Feb 2022
        MATLAB's hypot function is probably your best bet:
M = [0	125.1673584	13.18046188		194.4534607	176.9597931;
    1	126.4874725	13.56817341		196.5686646	176.3899078;
    2	125.1508484	13.18618774		196.9122314	175.5451508;
    3	125.8279877	12.93647861		195.5947876	176.2555695]
d = hypot(M(:,2)-M(:,4), M(:,3)-M(:,5))
7 Comments
  Walter Roberson
      
      
 on 29 Mar 2022
				hypot is consistently slower than square root of sum.
The difference is that hypot has code in order to be able to give useful answers for cases where the squares would overflow to infinity or underflow to 0, and for those cases it can be very valuable. But if you are certain you will never encounter those cases then manual calculation is faster.
N = 20;
t1 = zeros(N,1); t2 = zeros(N,1);
M = [(1:300000)' rand(300000,4)];
for K = 1 : N; start = tic; d = hypot(M(:,2)-M(:,4), M(:,3)-M(:,5)); stop = toc(start); t1(K) = stop; end
for K = 1 : N; start = tic; d = sqrt((M(:,2)-M(:,4)).^2 + (M(:,3)-M(:,5)).^2); stop = toc(start); t2(K) = stop; end
plot([t1, t2])
legend({'hypot', 'sqrt sum'})
More Answers (0)
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


