信息学奥赛之《向量几何一文通》

发布时间:2024年01月06日

Geometry

  1. π \pi π arccos ? ( ? 1 ) \arccos(-1) arccos(?1)
  2. 余弦定理:对于任意三角形(三边长为 a , b , c a,b,c a,b,c),则有 c 2 = a 2 + b 2 ? 2 a b cos ? θ c^2=a^2+b^2-2ab\cos_{\theta} c2=a2+b2?2abcosθ?,其中 θ \theta θ a , b a,b a,b 边的夹角。
  3. 正弦定理: a sin ? α = b sin ? β = c sin ? θ \frac{a}{\sin_{\alpha}}=\frac{b}{\sin_{\beta}}=\frac{c}{\sin_{\theta}} sinα?a?=sinβ?b?=sinθ?c?
  1. 向量的加法: A ? + B ? = C ? \vec A+\vec B = \vec C A +B =C
  1. 向量的减法: A ? ? B ? = C ? \vec A-\vec B=\vec C A ?B =C (按照加法的定义并通过平移旋转即可得到)

  2. 内积(点积): A ? ? B ? = ∣ A ? ∣ ∣ B ? ∣ cos ? θ \vec A\cdot \vec B=|\vec A||\vec B|\cos_{\theta} A ?B =A ∣∣B cosθ?

    几何意义:向量 A ? \vec A A 在向量 B ? \vec B B 上的投影与 B ? \vec B B 的长度的乘积

    Code:(证明略)

    double dot (Point A, Point B) { return A.x * B.x + A.y * B.y }
    
  3. 外积(叉积): A ? × B ? = ∣ A ? ∣ ∣ B ? ∣ sin ? θ \vec A\times \vec B=|\vec A||\vec B|\sin_{\theta} A ×B =A ∣∣B sinθ?

    几何意义:向量 A ? \vec A A 与向量 B ? \vec B B 组成的平行四边形的面积( B ? \vec B B A ? \vec A A 的逆时针方向为正)

    Code:(证明略)

    double cross(Point A, Point B) { return A.x * B.y - B.x * A.y }
    
  4. 向量取模(向量的长度)

    向量的长度为 d o t a ? , a ? \sqrt{\mathrm{dot_{\vec a,\vec a}}} dota ,a ? ?,即 x 2 + y 2 \sqrt{x^2+y^2} x2+y2 ?

    注意:前面包括后面的所有向量都默认起点为平面直角坐标系原点

    Code:

    double Length(Point A) { return sqrt(dot(a, a)); }
    
  5. 计算向量夹角

    已知向量的点积为 ∣ A ? ∣ ∣ B ? ∣ cos ? θ |\vec A||\vec B|\cos_{\theta} A ∣∣B cosθ?,现在要求 θ \theta θ,就是 KaTeX parse error: Undefined control sequence: \acos at position 1: \?a?c?o?s?_\frac{\vec A \…

    Code:

    double Angle(Point A, Point B) { return acos(dot(A, B)) /  Length(A) / Length(B)}
    
  6. 向量 A ? \vec A A 顺时针旋转 θ \theta θ 角度

    ( x , y ) [ cos ? θ ? sin ? θ sin ? θ cos ? θ ] (x,y) \begin{bmatrix} \cos_{\theta} &-\sin_{\theta}\\ \sin_{\theta} &\cos_{\theta} \end{bmatrix} (x,y)[cosθ?sinθ???sinθ?cosθ??]

    其中 ( x , y ) (x,y) (x,y) 表示向量 A ? \vec A A ,证明略。

    Code:

    Point Rotate(Point A, int Theta)
    {
        return Point(A.x * cos(Theta) + A.y * sin(Theta), -A.x * sin(Theta) + A.y * cos(Theta))
    }
    
  7. 直线点向式表示方式: P + t V ? P+t\vec V P+tV

  8. 判断点在直线上: A ? × B ? = 0 \vec A \times \vec B=0 A ×B =0 B ? \vec B B 是表示该直线的向量, A ? \vec A A 是该点与 B ? \vec B B 的起点所组成的向量

  9. 判断 2 2 2 条直线的位置关系,交点的位置(如果有)

    cross(v, w) = 0,则两直线平行或重合。

    两条直线: P + t V ? P+t\vec V P+tV Q + t W ? Q+t\vec W Q+tW

    V ? ′ \vec V ' V V ? \vec V V 的平移,红线为两个三角形的高,此时必有 2 2 2 个三角形相似

    image-20240103204326979

    即, 2 2 2 个紫色三角形是相似的,因为 V ? ′ \vec V' V V ? \vec V V 的平移,所以内错角相等,即 KaTeX parse error: Undefined control sequence: \ang at position 1: \?a?n?g? ?FMJ=\ang HLM,且都是直角三角形,所以相似。那么, F J M H = F K L H \frac{FJ}{MH}=\frac{FK}{LH} MHFJ?=LHFK?,因为 L H = ∣ V ? ∣ LH=|\vec V| LH=V ,所以 F J M H = F K ∣ V ? ∣ \frac{FJ}{MH}=\frac{FK}{|\vec V|} MHFJ?=V FK?,而 K K K 的坐标为 P + V ? F K ∣ V ? ∣ P+\vec V \frac{FK}{|\vec V|} P+V V FK?。所以只需要求出 F J M H \frac{FJ}{MH} MHFJ? 即可,而 F J M H \frac{FJ}{MH} MHFJ? 恰好等于 W ? × u ? V ? × W ? \frac{\vec W\times \vec u}{\vec V\times \vec W} V ×W W ×u ?

    故, K K K 点的坐标为 P + V ? W ? × u ? V ? × W ? P+\vec V \frac{\vec W\times \vec u}{\vec V\times \vec W} P+V V ×W W ×u ?

    Point Line_Intersection(Point P, Vector V, Point Q, Vector W)
    {
        Vector u = P - Q;
        return P + V * cross(W, u) / cross(V, W);
    }
    
  10. 点到直线的距离

    设向量 V ? \vec V V B ? A B-A B?A W ? \vec W W P ? A P-A P?A

    则有, V ? × W ? L e n g t h V ? \frac{\vec V\times \vec W}{\mathrm{Length_{\vec V}}} LengthV ?V ×W ? 为点 P P P A B AB AB 的距离。

  11. 点到线段的距离

    14 14 14 略有不同,边界情况:如果线段为 1 1 1 个点,则就是 P P P 与线段端点所组成的向量的模长。

    如果 V 1 ? ? V 2 ? < 0 \vec{V_1}\cdot \vec{V_2}<0 V1? ??V2? ?<0,则为 ∣ V 2 ? ∣ |\vec {V_2}| V2? ?。解释: V ? 1 ? V ? 2 \vec V_1 \cdot \vec V_2 V 1??V 2? 的符号正负取决于 cos ? θ \cos_\theta cosθ?,当 θ > 90 ° \theta>90\degree θ>90° 时, cos ? θ < 0 \cos_\theta<0 cosθ?<0,恰好是到线段左端点的距离为点 P P P 到线段的距离。

    如果 V ? 3 ? V ? 1 > 0 \vec V_3\cdot \vec V_1>0 V 3??V 1?>0,则为 ∣ V ? 3 ∣ |\vec V_3| V 3?,证明类似。

    反之,则为点到直线的距离。

  12. 点在直线上的投影

    用点积来求, A + V ? ( d o t V ? , p ? a ? d o t V ? , V ? ) A+\vec V (\mathrm{\frac{dot_{\vec V,\vec {p-a}}}{dot_{\vec V,\vec V}}}) A+V (dotV ,V ?dotV ,p?a ???)

    与上面类似

  13. P P P 是否在线段 A B AB AB

    首先, c r o s s P ? A , P ? B = 0 \mathrm{cross_{P-A,P-B}}=0 crossP?A,P?B?=0,这样保证了 P , A , B P,A,B P,A,B 三点共线。

    其次, d o t P ? A , P ? B ≤ 0 \mathrm{dot_{P-A,P-B}}\le0 dotP?A,P?B?0,即 cos ? θ ≤ 0 \cos_{\theta}\le0 cosθ?0,当 P P P 在线段上, 2 2 2 个向量相向, θ \theta θ 180 ° 180\degree 180° cos ? \cos cos 为负。

  14. 判断 2 2 2线段 是否相交

    即判断 A 2 , B 2 A_2,B_2 A2?,B2? 是否在 A 1 B 1 A_1B_1 A1?B1? 2 2 2 侧, A 1 , B 1 A_1,B_1 A1?,B1? A 2 , B 2 A_2,B_2 A2?,B2? 2 2 2 侧。

    用叉积做即可。

文章来源:https://blog.csdn.net/weixin_66946161/article/details/135427589
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。