rt

解决方案 »

  1.   

    用这条线为对角线,产生一个矩形(Rectangle).假设为变量recA.然后两个矩形求交集。Rectangle有IntersectsWith方法
      

  2.   

    to  MyLf(不睡觉的鱼)你仔细想想这样行吗?
      

  3.   

    第一步:判断线段是否在直线内,即判断线段端点是否在矩形内;
    (((x1 - x) * (x2 - x) + (y1 - y) * (y2 - y)) <= 0)
    第二步:判断线段与矩形四边是否相交;
    private bool IfCross(float x1,float y1,float x2,float y2,float x3,float y3,float x4,float y4)
    {
    float det, t1_x_det, t2_x_det, det1, det2;
    det = (x1 - x2) * (y4 - y3) - (x4 - x3) * (y1 - y2);
    if (det!= 0 )
    {
    t1_x_det = (y4 - y3) * (x4 - x2) - (x4 - x3) * (y4 - y2);
    t2_x_det = (x1 - x2) * (y4 - y2) - (y1 - y2) * (x4 - x2);
    if (det < 0)
    {
    det = -det;
    t1_x_det = -t1_x_det;
    t2_x_det = -t2_x_det;
    }
    return (0 <= t1_x_det && t1_x_det <= det) && (0 <= t2_x_det && t2_x_det <= det);
    }            
    else
    {
    det1 = (x1 - x2) * (y4 - y2) - (y1 - y2) * (x4 - x2);
    det2 = (x4 - x3) * (y4 - y2) - (y4 - y3) * (x4 - x2);
    if (det !=0 || det2 != 0)
    {
    return False;
    }
    else
    {
    return Inside(x1, y1, x3, y3, x4, y4) ||
    Inside(x2, y2, x3, y3, x4, y4) ||
    Inside(x3, y3, x1, y1, x2, y2) ||
    Inside(x4, y4, x1, y1, x2, y2);
    }
    }
    }
      

  4.   

    最好gdi+里有相应的功能,可我没找到最好能效率高些,因为要判断很多次……
      

  5.   

    在gdi+里就是判断一条线段是否经过剪切区
      

  6.   

    哈哈,MyLf(不睡觉的鱼) 满可爱的。
    多空的方法应该可用吧。
      

  7.   

    多空的方法不行,第一步就判断不准给你一个(500,500,100,100)的矩形
    一条x1 = 550,y1 = 550,x2 = 680,y2 = 680;
    的线段这条线段的端点在矩形内,你看能判断出来吗?
      

  8.   

    给你一个(500,500,100,100)的矩形
    一条x1 = 550,y1 = 550,x2 = 680,y2 = 680;
    的线段这条线段的端点在矩形内,你看能判断出来吗?
    -----------------------------------------
    这个用GDI+可以判断出来。
    Rectangle 有Contains(Point)方法可以知道某一点是否在矩形内。但这和你的问题没有直接关系。
      

  9.   

    Cohen-Sutherland 算法像这样经典的算法GDI+里应该有吧,可一搜一下这个算法,应该有实现的。要不查查图形学的书吧,书上还有代码,别自己想了,大师们早就想好了
      

  10.   

    给你一个(500,500,100,100)的矩形
    一条x1 = 550,y1 = 550,x2 = 680,y2 = 680;
    的线段.....村长同志,请你画一画,想一想,我的算法恰恰证明了这个线段没有经过矩形.
                /         680,680
               / 550,550
          .500,500.
    100,100
      

  11.   

    Line:起点为(LineStart.X,LineStart.Y)、终点为(LineEnd.X,LineEnd.Y)
    构建Line对应的Rectangle. new Rectangle(LineStart.X-int.MinValue,LineStart.Y-int.MinValue,LineEnd.X+MinValue,LineEnd.Y+MinValue).
    再和另一个Rectangle求交集。
    也可都转换为Region再求交集。
    涉及GDI+
      

  12.   

    to  MyLf(不睡觉的鱼)
    给你一个(500,500,100,100)的矩形
    一条x1 = 550,y1 = 550,x2 = 680,y2 = 680;
    的线段这条线段的端点在矩形内,你看能判断出来吗?
    -----------------------------------------
    这个用GDI+可以判断出来。
    Rectangle 有Contains(Point)方法可以知道某一点是否在矩形内。但这和你的问题没有直接关系。=========================================
    这个我当然知道,我是在判断一下多空的算法to 多空 我判断错了,不好意思:)to fsdy2000(乡愁) 
    没看明白
      

  13.   

    鼠标经过一条直线
    --------------------
    呵呵...这个就容易多了.
    用GraphicsPath的IsVisible(Point)方法就可以了.
      

  14.   

    线段有一个起点和终点。把起点和终点的x、y值同时减去和加上足够小的数,构成矩形的四个点。再将新构建的矩形和要判断的矩形进行交运算。上面的int.MinValue没有对,应该是绝对值足够小的数。
      

  15.   

    GZ
    ------------------------------------
    我的团队:www.51team.com欢迎访问,有志者共谋事,每天都有惊喜,SOHO