1:判断一个点在一条直线的那一侧。
假定给出的一条直线AB。A(x1,y1),b(x2,y2 ) ,另外给出一个点C(x3,y3),判断点在直线的那一侧。只需判断向量的数乘AB x AC=|AB|*|AC|sina。
所以判断在那一侧转化为求sina与0的大小问题,在转化为AB x AC与0的大小问题,则
AB =(ax=x2-x1;ay=y2-y1)
AC= ( bx=x3-x1;by=y3-y1;)
if(ax*by-ay*bx>0) 则sina>0, 0<a<180°,即点c在直线的左侧,
else if(ax*by-ay*bx<0) 则sina<0,180<a<360°即点c在直线的右侧。
(ax*by-ay*bx==0)则sina=0,a=180||360°。点在zhi直线上(这个在c语言的计算几何中很常用的)。
下面看以例题:nyoj68 三点顺序 代码:
#include <cstdio> #include <cmath> int main() { int x1,x2,x3,y1,y2,y3,count; while(~scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&x3,&y3)){ if(x1+x2+x3+y1+y2+y3==0) break; double ax,ay,bx,by; ax=x2-x1;ay=y2-y1; bx=x3-x1;by=y3-y1; if(ax*by-ay*bx>0) //判断点在直线的左侧。 count=0; else if(ax*by-ay*bx<0) count=1; else count=-1; printf("%d\n",count); } return 0; }