matlab - 非重叠圆的螺旋

标签 matlab plot spiral

我想创建一个从不相互重叠的螺旋形圆形标记。这是我到目前为止得到的结果,但它与第一​​个标记重叠,而最后一个标记彼此相距太远。

t = pi : pi/20 : 20*pi;
t = asind(1./t);
r = t;
x = r .* cos(t);
y = r .* sin(t);
plot(x,y,'o-');
axis equal; hold on 

在不将 t 重新定义为 asinf(1/t) 的情况下进行绘图,如下所示,如第二个绘图所示。

t = pi : pi/20 : 20*pi;
r = t;
x = r .* cos(t);
y = r .* sin(t);
plot(x,y,'o-');

关于角度 t 的间距必须如何才能实现标记不重叠的任何想法?

enter image description here

enter image description here

最佳答案

您可以近似弧长,大大简化Gilles-Phillipe's solution .这是一种简化,这意味着标记之间的距离并非处处相同。然而,距离相当一致,尤其是更远的地方。

这里的近似是假设螺旋在局部是一个圆。弧长为 r*dt,在距离原点 r 的螺旋线位置,角度变化为 dt 弧度.

我们现在不再需要求解符号方程。我写了一个循环的代码。我确信可以对其进行矢量化,使整个事情只需要两行代码,但我会将其作为练习留给读者。

这是代码:

d = 1; % step size
q = 1/(2*pi); % spiral constant -- radius grows by q every 1 radian turn
N = 300; % number of points

t = 0; % initial angle
r = d; % initial radius
p = zeros(100,2);
p(1,:) = [r*cos(t),r*sin(t)]; % first point
for ii=2:N
   dt = d/r;
   t = t+dt;
   r = r+dt*q;
   p(ii,:) = [r*cos(t),r*sin(t)];
end

clf
plot(p(:,1),p(:,2),'o-') 
axis equal

spiral with almost-equidistant markers

关于matlab - 非重叠圆的螺旋,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55555031/

相关文章:

mysql - 在 MATLAB 中将查询中的字符串传递给 MySQL 数据库

python - 从 MATLAB 到 Python 的无迭代实现

matlab - 如何确定函数调用的输出是否未使用?

wolfram-mathematica - Mathematica中地 block 的标准颜色是什么?

r - 使用 ggplot2 的整数值绘制阿基米德螺线

arrays - 添加数字数组,就好像它们代表数字一样

regex - 使用 lapply 在列表中绘制数据并使用列表元素的名称作为绘图标题

带有可选结果图的 Matlab UnitTest 测试用例?

scala - 在 Scala 中生成惰性 "spiral"

c - 如果一个点位于对数螺线附近 : Not returning points near the center