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;
}