向量的叉乘运算(向量的叉积)
向量的叉乘运算(向量的叉积)附上这段演示动画的julia代码:下面的动画演示了向量b在xy平面上旋转360°,红色的向量为向量a、b的叉积在3D空间的变化。另外,向量a、b的叉积也是一个向量,这个向量的方向垂直于向量a、b组成的平面的,就是图形学中常提到的法向量。为什么叉积的坐标定义公式会和对应的几何意义是等价的哪,这里我们简单展示推导的思路,我们尝试计算下面的公式的结果。通过叉积的坐标形式代入并一步步展开、合并可以得出叉积的几何意义。
叉积的定义3D空间中两个向量的叉积定义为:
两个向量的叉积还是一个向量,而向量的点积是标量(只有数值,无方向)
叉积的几何意义叉积的主要用途之一是可以计算三角形的面积,叉积满足下面的公式:
θ为向量a、b之间的夹角,上面的公式表明向量a、b叉积的模长等于向量a、b组成的平行四边形的面积,也就是a、b组成的三角形面积的2倍。
另外,向量a、b的叉积也是一个向量,这个向量的方向垂直于向量a、b组成的平面的,就是图形学中常提到的法向量。
推导叉积的坐标定义和几何意义为什么是等价的为什么叉积的坐标定义公式会和对应的几何意义是等价的哪,这里我们简单展示推导的思路,我们尝试计算下面的公式的结果。
通过叉积的坐标形式代入并一步步展开、合并可以得出叉积的几何意义。
下面的动画演示了向量b在xy平面上旋转360°,红色的向量为向量a、b的叉积在3D空间的变化。
附上这段演示动画的julia代码:
# 动画示例
using LinearAlgebra
using PyPlot
using PyCall
@pyimport matplotlib.animation as anim
fig = plt.figure()
ax = fig.gca(projection="3d")
vector_a = [1 0 0]
vector_b = [1 0 0]
vector_c = cross(vector_a vector_b)
ax.quiver(0 0 0 vector_a[1] vector_a[2] vector_a[3] color="blue")
ax.text(1.1 0 0 "a")
ax.quiver(0 0 0 vector_b[1] vector_b[2] vector_b[3] color="blue")
quiver = ax.quiver(0 0 0 vector_c[1] vector_c[2] vector_c[3] color="red")
function init()
ax.grid(true)
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.set_zlabel("Z")
ax.set_xlim([-1.2 1.2])
ax.set_ylim([-1.2 1.2])
ax.set_zlim([-1.2 1.2])
ax.set_title("cross product demo" color="b" fontsize=14)
return (quiver )
end
function update(frame)
# ln.set_UVC(cos(frame) sin(frame)) # used for 2d quiver
global quiver
quiver.remove()
vector_b = [cos(frame) sin(frame) 0]
vector_c = cross(vector_a vector_b)
ax.clear()
init()
ax.quiver(0 0 0 vector_a[1] vector_a[2] vector_a[3] color="blue")
ax.text(1.1 0 0 "a")
ax.quiver(0 0 0 vector_b[1] vector_b[2] vector_b[3] color="blue")
ax.text(cos(frame) sin(frame) 0 "b")
quiver = ax.quiver(0 0 0 vector_c[1] vector_c[2] vector_c[3] color="red")
return (quiver )
end
ani = anim.FuncAnimation(fig update frames=range(0 2*pi step=0.1) init_func=init blit=true interval=20)
ani.save("./cross_product.gif" fps=20)