我在一篇论文中发现了这个等式,它代表了一个物体的螺旋形运动:
当我在Matlab中绘制S
向量时,我得到了不同的结果,而不是螺旋形状。
问题出在哪里,是等式还是代码?
l
是[-1,1]
r
是[0,1]
b
是用于定义对数螺线形状的常数。
Matlab代码:
dim =3;
Max_iter =10;
X_star=zeros(1,dim);
ub = 100;
lb = -100;
X=rand(1,dim).*(ub-lb)+lb;
S = [];
t=0;
while t<Max_iter
a=-1+t*((-1)/Max_iter);
r=rand();
b=1;
l=(a-1)*rand + 1;
for j=1:size(X,2)
D= abs(X_star(j) - X(1,j));
X(1,j)= D * exp(b.*l).* cos(l.*2*pi) + X_star(j);
end
X_star=X(1,:);
S = [S X];
plot(S);
t = t+1;
end
答案 0 :(得分:0)
方程看起来根本不像螺旋。让我们为 3D 做这件事。首先是一些定义:
p0,p1
- 螺旋3D点开始和结束的中心r
- 螺旋的标量半径m
- 标量螺钉(如果不是整数而不是螺钉将不会以相同的角度位置开始和结束)我们首先需要TBN载体:
n = p1-p0
t = (1,0,0)
if (|dot(n/|n|,t)|>0.9) t = (0,1,0)
b = cross(n,t)
b = r*b / |b|
t = cross(b,n)
t = r*t / |t|
现在我们可以使用TBN作为基础载体进行螺旋运算:
// x' y' z'
p(a) = p0 + t*cos(2*Pi*m*a) + b*sin(2*Pi*m*a) + n*a
其中a = <0.0,1.0>
是您想要的螺旋上的参数。如果您离开此间隔,则会在p0
之前和p1
之后推断螺旋线。你可以考虑a
是时候......
正如您所看到的,方程只是 2D 参数圆(x',y')
+线性运动(z')
,并通过基矢量转换为p0,p1
方向和位置。< / p>
如果您需要 3D 向量的点,交叉和abs值的公式/代码,请参阅:
他们是我的答案的底部。