zoukankan      html  css  js  c++  java
  • 【CodeForces 227A】Where do I Turn?叉积

    ABC的位置关系只有三种可能:

    1.在一条直线上,输出TOWARDS

    A--B--C  

    2.AB 和BC垂直,B为直角顶点,AB左侧是C,输出LEFT

    C--B  

         |

      A

    3.AB 和BC垂直,B为直角顶点,AB右侧是C,输出RIGHT

    B --C

    |

    A

    给你ABC三点的坐标,求背朝A,站在B点,往C走要前进还是左转还是右转。

    分析

    假定ABC的坐标:A(xa,ya),B(xb,yb),C(xc,yc),粗体表示向量。

    BA为(x1,y1)=(xa-xb,ya-yb)

    BC为(x2,y2)=(xc-xb,yc-yb)

    两个向量叉积的模计算如下

    BA×BC=|BA||BC|sin(θ)

    BC×BA=|BC||BA|sin(φ)

    即夹角是第二个向量到第一个向量的顺时针方向的夹角,或者说第一个向量到第二个向量的逆时针方向的夹角。

    BA×BC的值大于0时说明BA为BC顺时针转过90度,对应RIGHT

    BA×BC的值小于0时说明BA为BC逆时针转过90度,对应LEFT

    BA×BC的值等于0时说明BA为BC顺时针转过180度。对应TOWARDS

    BA×BC=(x1,y1)×(x2,y2)=下面的行列式

    |x1 y1|

    |x2 y2|

    =x1*y2-x2*y1。

    于是就可以根据结果输出答案。

    代码

    #include <cstdio>
    #define ll long long
    int main()
    {
        ll xa,xb,xc,ya,yb,yc;
        scanf("%lld%lld%lld%lld%lld%lld",&xa,&ya,&xb,&yb,&xc,&yc);
        ll ans=(xb-xa)*(yc-yb)-(xc-xb)*(yb-ya);
        if(ans>0) printf("LEFT");
        else if(ans<0) printf("RIGHT");
        else printf("TOWARDS");
    }
  • 相关阅读:
    HDU
    矩形嵌套(DP)
    HDU
    HDU-1003 Max Sum
    Manacher算法—最长回文串
    Codeforces Round #460 (Div. 2) A B C D
    HDU 4540 威威猫系列故事——打地鼠 (简单DP)
    UVA 129 Krypton Factor(DFS 回溯)
    Codeforces 918A Eleven 918B Radio Station
    挑战程序设计竞赛(第2版)第112页勘误
  • 原文地址:https://www.cnblogs.com/flipped/p/5239650.html
Copyright © 2011-2022 走看看