admin管理员组

文章数量:1123196

Counter

题目链接:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{double x0,y0,x1,y1;scanf("%lf%lf%lf%lf",&x0,&y0,&x1,&y1);int q;scanf("%d",&q);double x2,y2;while(q--){scanf("%lf%lf",&x2,&y2);double  ans=(x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);if(ans>0){printf("COUNTER_CLOCKWISE\n");  ///1}else if(ans<0){printf("CLOCKWISE\n");///2}else{double ans1=(x1-x0)*(x2-x0)+(y1-y0)*(y2-y0);if(ans1<0){printf("ONLINE_BACK\n");///3}else{double l1=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));double l2=sqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0));if(l1<l2){printf("ONLINE_FRONT\n");///4}else printf("ON_SEGMENT\n");///5}}}
}

向量积可以被定义为:
模长:(在这里θ表示两向量之间的夹角(共起点的前提下)(0°≤θ≤180°),它位于这两个矢量所定义的平面上。)

方向:a向量与b向量的向量积的方向与这两个向量所在平面垂直,且遵守右手定则。(一个简单的确定满足“右手定则”的结果向量的方向的方法是这样的:若坐标系是满足右手定则的,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。)
也可以这样定义(等效):
向量积|c|=|a×b|=|a||b|sin<a,b>
即c的长度在数值上等于以a,b,夹角为θ组成的平行四边形的面积。
而c的方向垂直于a与b所决定的平面,c的指向按右手定则从a转向b来确定。
*运算结果c是一个伪向量。这是因为在不同的坐标系中c可能不同。 [1]

设 p1=(x1,y1),p2=(x2,y2),p3=(x3,y3)
p12=(x2-x1, y2-y1) p23=(x3-x2, y3-y2)
则当 p12 与 p23 的叉乘(向量积)p12 x p23 = (x2-x1)(y3-y2)-(y2-y1)(x3-x2)
为正时,p1-p2-p3路径的走向为逆时针,
为负时,p1-p2-p3 走向为顺时针,
为零时,p1-p2-p3 所走的方向不变,亦即三点在一直线上。

本文标签: Counter