给定一个点,如何来判断这个点位于一条直线上,这条直线宽度较大的时候,是用矩形画的,并且做了坐标变化,用来画出有斜率的直线.

解决方案 »

  1.   

    POINT pt_Rgn[5]; pt_Rgn[0].x = x1;
    pt_Rgn[0].y = y1;

    pt_Rgn[1].x = x2;
    pt_Rgn[1].y = y2;

    pt_Rgn[2].x = x3;
    pt_Rgn[2].y = y3;

    pt_Rgn[3].x = x4;
    pt_Rgn[3].y = y4;

    pt_Rgn[4].x = pt_Rgn[0].x;
    pt_Rgn[4].y = pt_Rgn[0].y;

    HRGN hRgn = CreatePolygonRgn( pt_Rgn, 5, WINDING );

    if( PtInRegion( hRgn, pt.x, pt.y ) )
    {
    }
    DeleteObject( hRgn );
      

  2.   

    数学题
    设宽直线为两条平行直线l1:y=kx+b    l2:y=kx+c
    其中:k,b,c是常数,c>=b;
    判断一点x1,y1是否在宽直线上,就是在两条平行线之间。即:kx1+b<=y1 && kx1+c>=y1
    如果直接平行于Y轴,就将x和y换一下就行了
      

  3.   

    能否稍微具体一点,结合windows的操作
    哎 数学都忘光了
      

  4.   

    POINT pt_Rgn[5];
    pt_Rgn[0].x = x1;
    pt_Rgn[0].y = y1;
    pt_Rgn[1].x = x2;
    pt_Rgn[1].y = y2;
    pt_Rgn[2].x = x3;
    pt_Rgn[2].y = y3;
    pt_Rgn[3].x = x4;
    pt_Rgn[3].y = y4;
    pt_Rgn[4].x = pt_Rgn[0].x;
    pt_Rgn[4].y = pt_Rgn[0].y;
    HRGN hRgn = CreatePolygonRgn( pt_Rgn, 5, WINDING );
    if( PtInRegion( hRgn, pt.x, pt.y ) )
    {
    //点在直线上
    }
    DeleteObject( hRgn );
    线宽度较大,那么直线有四个点(x1,y1),(x2,y2),(x3,y3),(x4,y4)
    点为(pt.x,pt.y)