c语言计算几何系列题、

时间:2022-06-18 11:28:07

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