matlab - 非重叠圆的螺旋
问题描述
我想创建一个从不相互重叠的圆形标记螺旋。这是我到目前为止得到的,但它与第一个标记重叠,最后一个标记彼此相距太远。
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 的间距必须如何实现标记不重叠的任何想法?
解决方案
您可以近似弧长,大大简化Gilles-Phillipe 的解。这是一种简化,这意味着标记之间的距离并非处处相同。然而,距离相当一致,尤其是更远的地方。
这里的近似是假设螺旋在局部是一个圆。然后弧长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
推荐阅读
- mongodb - MongoDB:$size 的参数必须是一个数组,但类型为:缺失
- c - 由于此功能,我的 do while 循环是否不起作用?
- julia - 在 Julia 中向 Dict 添加和调用 Function
- ios - 设置不带 clipsToBounds 的角半径仅适用于 UIView 类型?
- android - Firebase realtime database security rules
- magento2 - Magento 2.3.4 尺寸样本显示为可销售数量为 0 的产品
- reactjs - 为什么我第一次在 React 中单击提交时我的状态没有改变或工作
- acumatica - 如何专注于抛出异常的领域?
- javascript - 每个用户的游戏未定义,即使它不应该是
- raspberry-pi - 在 Raspberry Pi 2 上安装 Alpine Linux 与 root 密码斗争