我试图弄清楚箭头arrowheads
的方向向量。基本上我给了一个标准化的方向向量(u,v,w)
,我需要它的两个箭头的标准化方向向量,它们成15度角。
我的计划是先从一个简单的规范化向量(0,0,1)
开始。箭头的方向向量为(-sin(15), 0, -cos(15))
和(sin(15), 0, -cos(15))
,然后旋转(0,0,1)
,使其与给定的(u,v,w)
平行。我这样做是通过在其x轴上投影(u,v,w)
,并使其相对于(0,0,1)
的角度,然后在y轴上投影,并获得相对于(0,0,1)
的角度,然后我使用3d旋转矩阵来使用那些找到的角度来旋转箭头方向矢量。
我在下面有这个代码,但它无法正常工作。有谁看到什么错了?
由于
ra = 15
ca = math.cos(ra)
sa = math.sin(ra)
px = (0,v,w)
if u!=1:
px = [i/float(math.sqrt(v**2 + w**2)) for i in px]
py = (u,0,w)
if v!=1:
py = [i/float(math.sqrt(u**2 + w**2)) for i in py]
pxangle = math.acos(px[2])
pyangle = math.acos(py[2])
cpx = math.cos(pxangle)
spx = math.sin(pxangle)
cpy = math.cos(pyangle)
spy = math.sin(pyangle)
def rotatefunction(ah):
xr = (ah[0], -spx*ah[2], cpx*ah[2])
return (cpy*xr[0]+spy*xr[2], xr[1], -spy*xr[0]+cpy*xr[2])
lah = rotatefunction((-sa, 0, -ca))
rah = rotatefunction((sa, 0, -ca))
答案 0 :(得分:0)
首先,你需要在传递到math.cos,math.sin等之前将度数转换为弧度(=度*(pi / 180))。
假设箭头的归一化方向向量由
给出
平行于z轴的单位矢量由
给出
垂直于两个单位矢量的标准正交矢量由叉积式给出
并且两个向量之间的角度由标量积
给出
基本上,旋转是关于这个u(uhat)轴的角度θ。
给出了相应的rotation matrix
所以这是你需要将箭头矢量乘以的矩阵。