正反画画
题目描述
如果在一个二维平面xOy中,有三个不同的点A(x1,y1),B(x2,y2),C(x3,y3),根据这三个点的顺序进行画圆,想象一下,从A点开始画圆,穿过B点,再穿过C点,最后回到A点完成画圆,问判断出这样是按顺时针画圆还是按逆时针画圆。
输入格式
第一行包含一个整数T(1≤ T ≤ 1000),表示测试用例的数量。
在接下来的T行中,每一行包含6个用空格分隔的整数x1、y1、x2、y2、x3、y3(-1000 ≤ x1、y1、x2、y2、x3、y3 ≤ 1000)。
保证A、B、C三个点各不相同。
输出格式
对于每个测试用例,若结果为顺时针,则输出“Clockwise”,若结果为逆时针,则输出“Counterclockwise”(不用输出引号)。
样例输入
3
1 2 2 1 -1 -2
4 3 -4 3 3 4
4 -3 4 3 3 4
样例输出
Clockwise
Clockwise
Counterclockwise
思路:
主要还是找规律,直接if else就能写出来,但是自己在写的时候一开始没有用doule,或者说部分用了double,不是所有的地方用了double,导致有一个问题就是虽然用了double k,但是用来计算的x1,x2,y1,y2但是int类型,计算出来的结果还是int。
#include<bits/stdc++.h>
using namespace std;
main(){
double t;
cin>>t;
while(t--){
double x1,y1,x2,y2,x3,y3;
cin>>x1>>y1>>x2>>y2>>x3>>y3;
if(y1==y2){
if(x1>x2){
if(y3<y1){
cout<<"Counterclockwise"<<endl;
}else{
cout<<"Clockwise"<<endl;
}
}else{
if(y3<y1){
cout<<"Clockwise"<<endl;
}else{
cout<<"Counterclockwise"<<endl;
}
}
}else if(x1==x2){
if(y2>y1){
if(x3<x1){
cout<<"Counterclockwise"<<endl;
}else{
cout<<"Clockwise"<<endl;
}
}else{
if(x3<x1){
cout<<"Clockwise"<<endl;
}else{
cout<<"Counterclockwise"<<endl;
}
}
}else{
double k=(y2-y1)/(x2-x1);
double y=k*(x3-x1)+y1;
if((x2>x1&&y2>y1)){
if(y3>y){
//逆
cout<<"Counterclockwise"<<endl;
}else{
//顺
cout<<"Clockwise"<<endl;
}
}else if(x2>x1&&y1>y2){
if(y3>y){
//逆
cout<<"Counterclockwise"<<endl;
}else{
//顺
cout<<"Clockwise"<<endl;
}
} else if(x1>x2&&y1>y2){
if(y3>y){
//顺
cout<<"Clockwise"<<endl;
}else{
//逆
cout<<"Counterclockwise"<<endl;
}
} else if(x1>x2&&y1<y2){
if(y3>y){
//顺
cout<<"Clockwise"<<endl;
}else{
//逆
cout<<"Counterclockwise"<<endl;
}
}
}
}
}