【计算几何/叉积运用】 HRBUST 1304 13哥的机器人

13哥的机器人

Time Limit: 1000 MS Memory Limit: 65536 K

Description

13哥酷爱学习,13哥经过短暂学习后设计出来一机器人。13哥的机器人唯一缺陷是当遇到转弯时,就不知道该怎么走了,但是经过13哥的努力,这个机器人可以根据声音来转动方向,在没有声音的情况下沿直线行走。所以只能麻烦13哥在机器人遇到转弯时候,告诉机器人向左还是向右。

Input

有多组测试数据,第一行输入整数n,表示n个点(n>=3),接下来的n行每行输入一对数字x,y表示平面坐标系线路上的转折点(第一行是起点,最后一行是结束点)。当n为0时结束。

Output

对于每组输入数据单独一行,如果机器人往左转输出L,右则输出R

Sample Input

5
0 0
0 1
-1 1
-1 0
0 0

Sample Output

LLL

Author

鲁学涛

题意

判断下一个点在前两个点的左边还是右边

思路

使用叉积来判断下一个点与前两个点的所构成的三个点的顺时针和逆时针关系即可

坑点

当叉积为0时,不输出任何字符

AC代码

#include<bits/stdc++.h>
using namespace std;

class Point
{
    public:
        double x,y;
        Point(int x = 0,int y = 0):x(x),y(y) {}
        Point operator + (Point a)
        {
            return Point(x + a.x, y + a.y);
        }
        Point operator - (Point a)
        {
            return Point(x - a.x, y - a.y);
        }
};

typedef Point Vector;

double cross(Vector a,Vector b)
{
    return a.x*b.y - a.y*b.x;
}

void isclock(Point a,Point b,Point c)
{
    double ans = cross(b-a,c-a);
    if(ans>0) cout<<"L";
    else if(ans < 0) cout<<"R";
    else return ;
}

int main(void)
{
    int n;
    while(cin>>n,n)
    {
        Point a[n];
        for(int i = 0 ; i < n ; i++) cin>>a[i].x>>a[i].y;
        for(int i = 0 ; i < n-2 ; i++)
            isclock(a[i],a[i+1],a[i+2]);
        cout<<endl;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

两米长弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值