Set of points to Cartesian system
1 view (last 30 days)
Show older comments
Hello,
what whould be the fastest way to calculate the Cartesian coordinates from a distance matrix? First vertex would be at x=0 y=0 and second vertex at x=0 y=dist(V1V2).
THX
0 Comments
Accepted Answer
Matt Tearle
on 8 Dec 2011
You can use cmdscale to reconstruct coordinates from distances. You will need a further restriction to determine the locations uniquely (eg y2 > 0). But here's a way to get what you've specified:
% Make some Euclidean coord data
x = [0 0;0 2*rand - 1;2*rand(5,2) - 1];
% Construct distance matrix
d = squareform(pdist(x))
% Reconstruct Euclidean coords from distances
X = cmdscale(d);
% Shift center to first point
X = bsxfun(@minus,X,X(1,:));
% Rotate so x_2 = 0
alpha = atan2(X(2,1),-X(2,2));
R = [cos(alpha),-sin(alpha);sin(alpha),cos(alpha)];
X = X*R
If you compare X and the original x, you'll see that there can be sign ambiguities. You could nail that down, though, if it matters.
3 Comments
Matt Tearle
on 16 Dec 2011
Did Walter just say "I had never seen that before"? I think I get some kind of award now...
Walter Roberson
on 16 Dec 2011
Well, it is part of the Stats toolbox, and I do prefer to use software that works more than 19 times out of 20.
More Answers (2)
Walter Roberson
on 8 Dec 2011
x = zeros(1+length(Dists),1);
y = [0; cumsum(Dists(:))];
Ah, the joys of not providing sufficient examples...
0 Comments
See Also
Categories
Find more on Dimensionality Reduction and Feature Extraction 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!