题目大意:已知有一固定大小的手掌,放进坐标轴里。
输入T,每次输入20个坐标,坐标是顺时针或者是逆时针,根据坐标判断手掌是右手掌还是左手掌;
解题思路:计算长度为 6 和 9 这两个向量的叉积,如果相乘为正数,则为逆时针,为右手,反之是左手。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1000;
double eps=0.5;
struct node
{
double x,y;
} arr[N];
int t;
double dist(node a,node b)//两点间距离
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
double xlj(node a,node b,node c)//向量积
{
return (a.x-b.x)*(b.y-c.y)-(a.y-b.y)*(b.x-c.x);
}
int main()
{
cin>>t;
while(t--)
{
bool f=0;
for(int i=0; i<20; i++)
scanf("%lf %lf",&arr[i].x,&arr[i].y);
for(int i=0; i<20; i++)
{
if(fabs(dist(arr[i],arr[(i+1)%20])-9)<eps)
{
if(((xlj(arr[i],arr[(i+1)%20],arr[(i+2)%20])<0)&&(fabs(dist(arr[(i+1)%20],arr[(i+2)%20])-8)<eps))||(fabs(dist(arr[(i+1)%20],arr[(i+2)%20])-6)<eps&&xlj(arr[i],arr[(i+1)%20],arr[(i+2)%20])>0))
f=1;
}
}
if(f==1)
puts("left");
else
puts("right");
}
}