在3D空间中绘制旋转的平移圆

时间:2016-11-17 20:35:56

标签: math plot gnuplot

Here is a little image来自我目前的情况。目前我正试图在前面以红色矢量为中心绘制一个圆圈。圆圈应该触摸蓝色矢量。 但我可以自己调整参数(当然还有其他的圈子)。

所以我想要的是一种通用的方法来绘制一个在3d空间中围绕任意轴旋转的任意中心点的圆

以下代码是我目前的草稿。它围绕任意中心点绘制一个水平圆,但旋转部分仍然缺失。

set parametric
set urange [0:pi/2]
set vrange [0:2*pi]
 [..]
# radius
r = 0.1
# center (d,e,k) 
d = 0.1
e = 0.2
k = 0.3
fTx(u,v) = d+r*cos(v)
fTy(u,v) = e+r*sin(v)
fTz(u,v) = k         

splot [..]  ,\
      fTx(u,v), fTy(u,v), fTz(u,v)

1 个答案:

答案 0 :(得分:4)

您可以使用rotation matrices旋转圆圈的点。例如,对于围绕x轴旋转角度th,点(fTx, fTy, fTz)乘以Rx(th)

         ( 1     0         0    )
Rx(th) = ( 0  cos(th)  -sin(th) )
         ( 0  sin(th)   cos(th) )

对于旋转th = 24°,您的Gnuplot脚本可以扩展如下:

th = 24.0*pi/180
rotx(u,v) = fTx(u,v)
roty(u,v) = cos(th)*fTy(u,v) - sin(th)*fTz(u,v)
rotz(u,v) = sin(th)*fTy(u,v) + cos(th)*fTz(u,v)

splot rotx(u,v), roty(u,v), rotz(u,v)

绕另一个轴旋转是直接的。

再次考虑这个主题,在将旋转的圆圈移动到(d, e, k)之前先旋转可能更容易:

set parametric
set urange [0:pi/2]
set vrange [0:2*pi]
# radius
r = 0.1
# center (d,e,k)
d = 0.1
e = 0.2
k = 0.3
# rotation angles (th, ..)
th = 24.0*pi/180.0

fTx(u,v) = r*cos(v)
fTy(u,v) = r*sin(v)
fTz(u,v) = 0      

rotx(u,v) = fTx(u,v)
roty(u,v) = cos(th)*fTy(u,v) - sin(th)*fTz(u,v)
rotz(u,v) = sin(th)*fTy(u,v) + cos(th)*fTz(u,v)

movx(u,v) = d + rotx(u, v)
movy(u,v) = e + roty(u, v)
movz(u,v) = k + rotz(u, v)

splot movx(u,v), movy(u,v), movz(u,v)