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)
答案 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)