天天看點

c語言計算幾何系列題、

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