【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");
}

 

转载于:https://www.cnblogs.com/flipped/p/5239650.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值