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

标签 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)

最佳答案

您可以使用 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)

关于math - 在 3D 空间中绘制旋转、平移的圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40664522/

相关文章:

math - 如何根据从原点开始的其他两个向量计算新向量?

python - 如何绘制数据帧?在 Python 中

r - 如何在 x 轴为时间轴的 R 图中绘制箭头?

gnuplot - gnuplot 中的 karplus 方程

javascript - Math.random() 如何在 javascript 中工作?

javascript:将基本数学运算传递给函数

r - 将直方图绘制为线条

datetime - 无法使用日期/时间字段在 Gnuplot 中绘制烛台数据

gzip - gnuplot能否透明打开压缩数据文件以节省存储空间?

c++ - 简单的计算给出了错误的结果