根据欧几里德距离创建围绕圆的等距点:MATLAB
Posted
技术标签:
【中文标题】根据欧几里德距离创建围绕圆的等距点:MATLAB【英文标题】:Create equidistant points around a circle, based on Euclidean distance: MATLAB 【发布时间】:2017-08-11 06:20:02 【问题描述】:我想要一个圆上的 N 个点,由 50 的欧几里得距离(直线,而不是圆周)分开。半径由点的数量和连续点之间的距离决定。
但是,当我选择其中一个点作为参考并计算到其他点的距离时,我没有得到任何等于 50 的距离值。
下面是我的代码:
N = 100; % number of points
eclddst = 50; % euclidean distance between adjacent points
r = eclddst/(2*sin(pi/N)); % radius of the circle
cord = r*exp((0:1/(N-1):1)*pi*2*1i)'; % coordinates
XCor = real(cord);
YCor = imag(cord);
N_COORD = [XCor YCor];
% taking location 3 as the reference point to check the distance between the points
DSTNT = sqrt( (N_COORD(3,1)-N_COORD(:,1)).^2 + ( N_COORD(3,2)- N_COORD(:,2)).^2)';
我获得的第三点周围的距离值为:
100.959
50.505
0.000
50.505
100.959
151.311
与点 3 相邻的点的距离值应为 50
,而不是 50.505
。
为什么会出现此错误? 提前致谢。
【问题讨论】:
绳子的配方从何而来?你为什么要使用虚构的东西?另外,只是一个题外话:使用linspace(0,1,N)
而不是0:1/(N-1):1
@Tinacord的公式就是从这个link得到的。
【参考方案1】:
您的问题在于您的公式生成的点数,因为您关注的 link 有误导性陈述。请注意,它是这样声明的:
r = A*exp((0:1/300:1)*pi*2j); % 300 point circle, radius A
但是,这将给出 301 分而不是 300。如果您绘制此图,您只会看到 300 分(如果您使用 4 分则更容易查看)。第一点和最后一点是相同的,因为
exp(0*pi*2j) = exp(1*pi*2j) = 1
要解决这个问题,最简单的选择是将0:1/300:1
更改为不达到 1,或者简单地创建并删除一个额外的点,如下所示:
N = 100; % number of points
d = 50; % Euclidean distance between adjacent points
% Euclidean distance around circle is essentially side length of N-sided polygon.
% Triangular sector angle within polygon (rads): 2*pi/N
% By bisecting the triangle to get a right-triangle, we can deduce that
% sin((2*pi/N)/2) = (d/2)/r => r = (d/2)/sin(pi/N)
r = (d/2)/sin(pi/N);
% Use linspace as it's clearer than colon array, create N+1 points
% Note that point 1 and point N+1 will be identical!
complexcoords = r*exp(linspace(0,1,N+1)*pi*2*1i).';
% Remove the last point as you put it in an array
coords = [real(complexcoords(1:N)) imag(complexcoords(1:N))];
作为检查:
% Euclidean distances from point 3
dists = sqrt((coords(3,1)-coords(:,1)).^2 + (coords(3,2)-coords(:,2)).^2);
dists(1:5)
>> 99.951
50 % Neighbouring points are distance 50!
0
50 % Ditto
99.951
请注意,您应该小心使用'
。这是复共轭转置,意味着x + yi
变为x - yi
。您不会在以 0 和偶数个点为中心的圆上注意到这一点,但是当您想在 MATLAB 中转置某些内容时,请始终使用.'
,否则您可能会遇到一些难以诊断的问题!我已在上面的代码中更正了这一点。
文档链接:ctranspose
/'
、transpose
/.'
。
【讨论】:
哇...似乎主要问题是相同的点。在您为相同的点建议的纠正之后,它就像一个魅力。非常感谢。 也感谢'
转置的提示。从来不知道。
这是一个令人头疼的问题,直到我做了一个 4 点的快速绘图并得到一个三角形之前,这并不明显!如果您有兴趣,我添加了转置函数的文档链接,当您使用复数时它们变得很重要!
太棒了。再次感谢您的帮助。以上是关于根据欧几里德距离创建围绕圆的等距点:MATLAB的主要内容,如果未能解决你的问题,请参考以下文章