我目前面临标题中提到的问题。 如果我只想要有3个单独的点并将它们记录为matlab中有3个坐标的点,就像下面的
一样容易A=[0 0 1];%coordinates of Q1
B=[0 0 -1];%coordinates of Q2
C=[0 1 0];%coordinates of Q3
因此,它描述了A(0,0,1),B(0,0,-1),C(0,1,0)的坐标。在进一步的计算中,我可以使用坐标并进行如下计算:
R1=A-B; %vector from Q2 to Q1
R2=A-C; %vector from Q3 to Q1
R3=C-B; %vector from Q2 to Q3
然而,如果我想用100分随机生成许多分数,我上面写的方式是愚蠢的。而且我也想像以前一样使用坐标,因为它更方便。以下是我尝试过的方法。
% random distributed points
x = rand(Number_of_Points, 1);
y = rand(Number_of_Points, 1);
z = x.^2 + y.^2;
Points = [x(:) y(:) z(:)];
但它只是记录了所有点的3个坐标,我不能像以前那样单独记录它们。我想使用Points(1)-Points(2)
计算向量是否有人知道如何做到这一点?
答案 0 :(得分:2)
您只需要使用下标索引而不是线性索引:
Points(1,:) - Points(2,:)
或者如果你想要欧几里德距离,你可以像
那样做 sqrt(sum((Points(1,:) - Points(2,:)).^2))
或使自己成为匿名函数:
PointsDistance = @(a,b)(sqrt(sum((Points(a,:) - Points(b,:)).^2)))
现在你可以打电话了
PointsDistance(1,2)