在单文档View窗口中从左至右任意画一条折线,然后从上至下垂直画一条直线(和折线相较),如何得到相较点的 Y轴数值??
谢谢了。

解决方案 »

  1.   

    这应该是一个二元一次方程组求解吧
    view的坐标原点(0,0)在左上角,x轴向右为正,y轴向下为正,
    先求出你画的两条直线在这个坐标下的方程,然后解方程组求交点好了//纯数学理解
      

  2.   


    int
    Calc_Two_Line_Point( double a1, double b1, double c1, double a2, double b2, double c2, OUT double *x, OUT double *y )
    {
    double xx, yy;
    double e; e = ( a1 * b2 - a2 * b1 );
    if( equ( e, 0 ) )
    {
    return 0;
    } yy = ( a2 * c1 - a1 * c2 ) / e; if( equ( a2, 0 ) )
    {
    xx = ( -1 * b1 * yy - c1 ) / a1;
    }
    else
    {
    xx = ( -1 * b2 * yy - c2 ) / a2;
    } *x = xx;
    *y = yy; return 1;
    }
      

  3.   


    //凡是直线都是ax + by + c = 0格式。
    //点斜式求a, b, c
    void
    Calc_General_abc( double x, double y, double k, OUT double *a, OUT double *b, OUT double *c )
    {
    if( fabs( k ) >= WUQIONGDA )
    {
    //斜率很大
    *a = 1.0;
    *b = 0.0;
    *c = -1 * x;
    }
    else if( equ( k, 0 ) )
    {
    //斜率为0
    *a = 0.0;
    *b = 1.0;
    *c = -1 * y;
    }
    else
    {
    //一般的
    double aa, bb, cc; //这条直线与X轴的交点
    cc = ( ( k * x ) - y ) / k;
    if( equ( cc, 0 ) )
    {
    //ax + by + c = 0;
    //ax = -by;
    //y = -ax / b
    //y / x = - a / b
    //k = - a / b
    aa = 1;
    bb = -1 / k;
    }
    else
    {
    bb = ( -1.0 * cc ) / ( y - k * x );
    aa = ( -1.0 * bb * k );
    } if( aa < 0.0 )
    {
    aa *= -1.0;
    bb *= -1.0;
    cc *= -1.0;
    } *a = aa;
    *b = bb;
    *c = cc;
    }
    }