感谢boshi和Dimitry大佬!!!您们tql!!!
向量的基本操作
加减
几何意义:满足平行四边形法则
代数意义:a⃗±b⃗=(xa±xb,ya±yb,...)\vec a \pm \vec b=(x_a \pm x_b,y_a \pm y_b,...)a±b=(xa±xb,ya±yb,...)
点乘
几何意义:a⃗\vec aa在b⃗\vec bb上的投影与∣b⃗∣|\vec b|∣b∣的乘积。
代数意义:a⃗⋅b⃗=(xaxb,yayb,...)\vec a \cdot \vec b= (x_ax_b,y_ay_b,...)a⋅b=(xaxb,yayb,...)
叉乘
几何意义:
除了二维情况下叉乘是假的(表示两向量所成平行四边形的有向面积)以外,kkk维下必须有k+1k+1k+1个向量一起叉乘,叉积是一个和它们都垂直的向量。
代数意义:
a⃗×b⃗=∣i^j^k^⋯xayaza⋯xbybzb⋯xcyczc⋯⋮⋮⋮⋱∣ \vec a \times \vec b= \left| \begin{matrix} \widehat{i} & \widehat{j} & \widehat{k} & \cdots \\ x_a & y_a & z_a & \cdots \\ x_b & y_b & z_b & \cdots \\ x_c & y_c & z_c & \cdots \\ \vdots & \vdots & \vdots & \ddots \end{matrix} \right| a×b=∣∣∣∣∣∣∣∣∣∣∣ixaxbxc⋮jyaybyc⋮kzazbzc⋮⋯⋯⋯⋯⋱∣∣∣∣∣∣∣∣∣∣∣
混合积
这里主要提一下三维,其实我们说的二维叉积更像混合积的说……
三维下求三个向量所成平行六面体的有向面积,方向遵循右手定则。
[a⃗,b⃗,c⃗]=∣xayazaxbybzbxcyczc∣ [ \vec{a},\vec{b},\vec{c} ]= \left| \begin{matrix} x_a & y_a & z_a \\ x_b & y_b & z_b \\ x_c & y_c & z_c \\ \end{matrix} \right| [a,b,c]=∣∣∣∣∣∣xaxbxcyaybyczazbzc∣∣∣∣∣∣
旋转
将向量逆时针旋转θ\thetaθ:
rotate(a⃗,θ)=(xcosθ−ysinθ,xsinθ+ycosθ)rotate(\vec a,\theta)=(x \cos{\theta}-y \sin{\theta},x \sin{\theta}+ y \cos{\theta})rotate(a,θ)=(xcosθ−ysinθ,xsinθ+ycosθ)
放缩
ka⃗=(kx,ky,...)k \vec a =(kx,ky,...)ka=(kx,ky,...)
向量表示法
直线
一般用直线上一点ppp和一个方向向量v⃗\vec{v}v确定:p⃗+v⃗\vec{p}+\vec{v}p+v
平面
一般用法向量n⃗\vec{n}n和平面上一点ppp确定:{q⃗∣(q⃗−p⃗)⋅n⃗=0}\{ \vec{q}|(\vec{q}-\vec{p}) \cdot \vec{n}=0 \}{q∣(q−p)⋅n=0}
例题
例1
求两直线p1⃗+v1⃗\vec{p_1}+\vec{v_1}p1+v1,p2⃗+v2⃗\vec{p_2}+\vec{v_2}p2+v2的交点ooo
解:设o⃗=p2+tv2⃗\vec o=p_2+t \vec{v_2}o=p2+tv2,又由于v1⃗×(p2+tv2⃗−p1⃗)=0\vec{v_1} \times (p_2+t \vec{v_2}-\vec{p_1})=0v1×(p2+tv2−p1)=0,所以:
o⃗=p2⃗+v1⃗×(p1⃗−p2⃗)v1⃗×v2⃗v2⃗\vec{o}=\vec{p_2}+\frac{\vec{v_1} \times (\vec{p_1}-\vec{p_2})}{\vec{v_1} \times \vec{v_2}} \vec{v_2}o=p2+v1×v2v1×(p1−p2)v2
例2
求点QQQ到直线p⃗+v⃗\vec{p}+\vec{v}p+v的垂足HHH。
解:设H⃗=p⃗+tv⃗\vec H=\vec{p}+t\vec{v}H=p+tv,然后有(Q⃗−p⃗−tv⃗)⋅v⃗=0(\vec{Q}-\vec{p}-t\vec{v}) \cdot \vec{v}=0(Q−p−tv)⋅v=0,所以:
H⃗=p⃗+(Q⃗−P⃗)⋅v⃗∣v⃗∣2v⃗\vec{H}=\vec{p}+\frac{(\vec{Q}-\vec{P}) \cdot \vec{v}}{|\vec{v}|^2} \vec{v}H=p+∣v∣2(Q−P)⋅vv
例3
求向量v1⃗\vec{v_1}v1和向量v2⃗\vec{v_2}v2尾部重合后角平分线的方向向量。
解:将两个向量都缩放为单位向量,由于向量加法满足平行四边形法则,所以加起来即可。
例4
已知平面上三点,求这个平面的一个法向量。
解:众所周知叉积是与这个向量都平行的向量,所以叉积一下即可。
例5
求点QQQ到平面(p⃗,n⃗)(\vec{p},\vec{n})(p,n)的距离。
解:其实就是PQPQPQ在法向量上的投影长度,也就是:
d=(Q⃗−p⃗)⋅n⃗∣n⃗∣d=\frac{(\vec{Q}-\vec{p}) \cdot \vec{n}}{|\vec{n}|}d=∣n∣(Q−p)⋅n
求两圆外公切线切点
if(c1.r<c2.r) swap(c1,c2);
point v=c2.o-c1.o;
db d=dist(c1.o,c2.o),a1=atan2(v.y,v.x),a2=acos((c1.r-c2.r)/d);
point k1=(point){c1.o.x+cos(a1+a2)*c1.r,c1.o.y+sin(a1+a2)*c1.r};
point k2=(point){c2.o.x+cos(a1+a2)*c2.r,c2.o.y+sin(a1+a2)*c2.r};
point k3=(point){c1.o.x+cos(a1-a2)*c1.r,c1.o.y+sin(a1-a2)*c1.r};
point k4=(point){c2.o.x+cos(a1-a2)*c2.r,c2.o.y+sin(a1-a2)*c2.r};