GDI+中画两条线,求两条线的交点坐标

解决方案 »

  1.   

    CPoint p;
        if(itLine->x2==itLine->x1)
    {
    v=(double)(itLineSort->y2-itLineSort->y1)/
    (double)(itLineSort->x2-itLineSort->x1);

    p.x=itLine->x1;
    p.y=itLineSort->y1+(p.x-itLineSort->x1)*v;
    }
    else if(itLineSort->x2==itLineSort->x1)
    {
    u=(double)(itLine->y2-itLine->y1)/
    (double)(itLine->x2-itLine->x1);
    p.x=itLineSort->x1;
    p.y=itLine->y1+(p.x-itLine->x1)*u;
    }
    else
    {
    u=(double)(itLine->y2-itLine->y1)/
    (double)(itLine->x2-itLine->x1);
    v=(double)(itLineSort->y2-itLineSort->y1)/
    (double)(itLineSort->x2-itLineSort->x1);
    p.x=(itLineSort->y1-itLine->y1+itLine->x1*u-itLineSort->x1*v)/(u-v);
    p.y=(p.x-itLine->x1)*u+itLine->y1;

    }
    if(itLine->x1>itLine->x2)
    {
    if(p.x>itLine->x1
    ||p.x<itLine->x2)
    return;
    }
    else
    {
    if(p.x<itLine->x1
    ||p.x>itLine->x2)
    return;
    }
    if(itLine->y1>itLine->y2)
    {
    if(p.y>itLine->y1
    ||p.y<itLine->y2)
    return;
    }
    else
    {
    if(p.y<itLine->y1
    ||p.y>itLine->y2)
    return;
    }
    if(itLineSort->x1>itLineSort->x2)
    {
    if(p.x>itLineSort->x1
    ||p.x<itLineSort->x2)
    return;
    }
    else
    {
    if(p.x<itLineSort->x1
    ||p.x>itLineSort->x2)
    return;
    }
    if(itLineSort->y1>itLineSort->y2)
    {
    if(p.y>itLineSort->y1
    ||p.y<itLineSort->y2)
    return;
    }
    else
    {
    if(p.y<itLineSort->y1
    ||p.y>itLineSort->y2)
    return;
    } return p;//此处的p为两线段交点
      

  2.   

    以上程序中itLineSort和itLine分别为
    struct Line
    {
    long x1;
    long y1;
    long x2;
    long y2;
    };
    类型.
      

  3.   

    那么复杂干嘛,用数学公式设A线为: y1 = k1*x1 + a;
    设B线为: y2 = k2*x2 + b;两线相交时,x1 = x2, y1 = y2 ==>(k1-k2)*x1 = b - a;==> x1 = (b - a) / (k1 - k2)
    ...
      

  4.   

    设A线为: y1 = k1*x1 + a;
    设B线为: y2 = k2*x2 + b;两线相交时,x1 = x2, y1 = y2 ==>(k1-k2)*x1 = b - a;==> x1 = (b - a) / (k1 - k2)
    这个方法最好呀.
      

  5.   

    请勿见笑,数学的公式都真的忘了七七八八了.k1是否指斜率?

    k1=(aY2-aY1)/(aX2-aX1)
      

  6.   

    zhudaneu(番茄酱),你的方法是没错的.
    weisunding(鼎鼎)的方法与 zhudaneu(番茄酱)其实都是一样的.但是我说的问题是,由于线条是用户自行画上的,由于线条方向问题造成计算的结果与实际坐标相反,我正在找其中的规律.
    以下这种情况可以计算出来
       \
        \
         \
    ———*———
    例如以下这种情况就计算不对了.
         |
         *  
        /|
       / |
      /
     /
    /只怪自己对斜率基本没什么印象上,所以只好再研究研究吧.