感谢boshi和Dimitry大佬!!!您们tql!!!
向量的基本操作
加减
几何意义:满足平行四边形法则
代数意义: a ⃗ ± b ⃗ = ( x a ± x b , y a ± y b , . . . ) \vec a \pm \vec b=(x_a \pm x_b,y_a \pm y_b,...) a±b=(xa±xb,ya±yb,...)
点乘
几何意义: a ⃗ \vec a a在 b ⃗ \vec b b上的投影与 ∣ b ⃗ ∣ |\vec b| ∣b∣的乘积。
代数意义: a ⃗ ⋅ b ⃗ = ( x a x b , y a y b , . . . ) \vec a \cdot \vec b= (x_ax_b,y_ay_b,...) a⋅b=(xaxb,yayb,...)
叉乘
几何意义:
除了二维情况下叉乘是假的(表示两向量所成平行四边形的有向面积)以外, k k k维下必须有 k + 1 k+1 k+1个向量一起叉乘,叉积是一个和它们都垂直的向量。
代数意义:
a ⃗ × b ⃗ = ∣ i ^ j ^ k ^ ⋯ x a y a z a ⋯ x b y b z b ⋯ x c y c z c ⋯ ⋮ ⋮ ⋮ ⋱ ∣ \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=∣∣∣∣∣∣∣∣∣∣∣i xaxbxc⋮j yaybyc⋮k zazbzc⋮⋯⋯⋯⋯⋱∣∣∣∣∣∣∣∣∣∣∣
混合积
这里主要提一下三维,其实我们说的二维叉积更像混合积的说……
三维下求三个向量所成平行六面体的有向面积,方向遵循右手定则。
[ a ⃗ , b ⃗ , c ⃗ ] = ∣ x a y a z a x b y b z b x c y c z c ∣ [ \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 θ:
r o t a t e ( a ⃗ , θ ) = ( x cos θ − y sin θ , x sin θ + y cos θ ) rotate(\vec a,\theta)=(x \cos{\theta}-y \sin{\theta},x \sin{\theta}+ y \cos{\theta}) rotate(a,θ)=(xcosθ−ysinθ,xsinθ+ycosθ)
放缩
k a ⃗ = ( k x , k y , . . . ) k \vec a =(kx,ky,...) ka=(kx,ky,...)
向量表示法
直线
一般用直线上一点 p p p和一个方向向量 v ⃗ \vec{v} v确定: p ⃗ + v ⃗ \vec{p}+\vec{v} p+v
平面
一般用法向量 n ⃗ \vec{n} n和平面上一点 p p p确定: { q ⃗ ∣ ( q ⃗ − p ⃗ ) ⋅ n ⃗ = 0 } \{ \vec{q}|(\vec{q}-\vec{p}) \cdot \vec{n}=0 \} {q∣(q−p)⋅n=0}
例题
例1
求两直线 p 1 ⃗ + v 1 ⃗ \vec{p_1}+\vec{v_1} p1+v1, p 2 ⃗ + v 2 ⃗ \vec{p_2}+\vec{v_2} p2+v2的交点 o o o
解:设 o ⃗ = p 2 + t v 2 ⃗ \vec o=p_2+t \vec{v_2} o=p2+tv2,又由于 v 1 ⃗ × ( p 2 + t v 2 ⃗ − p 1 ⃗ ) = 0 \vec{v_1} \times (p_2+t \vec{v_2}-\vec{p_1})=0 v1×(p2+tv2−p1)=0,所以:
o ⃗ = p 2 ⃗ + v 1 ⃗ × ( p 1 ⃗ − p 2 ⃗ ) v 1 ⃗ × v 2 ⃗ v 2 ⃗ \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
求点 Q Q Q到直线 p ⃗ + v ⃗ \vec{p}+\vec{v} p+v的垂足 H H H。
解:设 H ⃗ = p ⃗ + t v ⃗ \vec H=\vec{p}+t\vec{v} H=p+tv,然后有 ( Q ⃗ − p ⃗ − t v ⃗ ) ⋅ v ⃗ = 0 (\vec{Q}-\vec{p}-t\vec{v}) \cdot \vec{v}=0 (Q−p−tv)⋅v=0,所以:
H ⃗ = p ⃗ + ( Q ⃗ − P ⃗ ) ⋅ v ⃗ ∣ v ⃗ ∣ 2 v ⃗ \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
求向量 v 1 ⃗ \vec{v_1} v1和向量 v 2 ⃗ \vec{v_2} v2尾部重合后角平分线的方向向量。
解:将两个向量都缩放为单位向量,由于向量加法满足平行四边形法则,所以加起来即可。
例4
已知平面上三点,求这个平面的一个法向量。
解:众所周知叉积是与这个向量都平行的向量,所以叉积一下即可。
例5
求点 Q Q Q到平面 ( p ⃗ , n ⃗ ) (\vec{p},\vec{n}) (p,n)的距离。
解:其实就是 P Q PQ PQ在法向量上的投影长度,也就是:
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};