一般的都是给定功能让写程序,如下有个函数请读出有何功能。
这段函数本来是本人 反编译出来的。
修改前:
   Point GetCrossPoint(int i, int j, int k, int l, int i1, int j1, int k1)
        Point point = new Point();
        if(i == 1 || i == 5)
        {
            point.x = k;
            point.y = (int)Math.round((double)i1 - ((double)(k1 - i1) * (double)(l - k)) / (double)(j1 - l));
        } else
        {
            point.x = (int)Math.round(((double)(j1 - l) * (double)(i1 - k) - (double)((k1 - i1) * l)) / (double)(j * (j1 - l) + (i1 - k1)));
            point.y = j * point.x + k;
        }
        if(point.y > Math.max(i1, k1) || point.y < Math.min(i1, k1) || point.x > Math.max(l, j1) || point.x < Math.min(l, j1))
        {
            point.x = 999;
            point.y = 999;
        }
        return point;
    }
修改后:
  Point GetCrossPoint(int flag, int unknow, int x, int x0, int y0, int x1, int y1)
    {
        Point point = new Point();
        if(flag == 1 || flag == 5)//这种情况下:(x0,y0),(point.x,point.y),(x1,y1)共线
        {
            point.x = x;
            point.y = (int)Math.round((double)x0- ((double)(y1 - y0) * (double)(x0 - x)) / (double)(x1 - x0));
        } 
        else//这种情况呢?
        {
            point.x = (int)Math.round(((double)(x1 - x0) * (double)(y0 - x) - (double)((y1 - y0) * x0)) / (double)(unknow * (x1 - x0) + (y0 - y1)));
            point.y = unknow * point.x + x;
        }
        //如果求得的(x,y)在(x0,y0)(x1,y1)之外
        if(point.y > Math.max(y0, y1) || point.y < Math.min(y0, y1) || point.x > Math.max(x0, x1) || point.x < Math.min(x0, x1))
        {
            point.x = 999;
            point.y = 999;
        }
        return point;
    }
麻烦各位看看else里是什么意思。
可能有用的联想:贝塞尔曲线,轮廓...

解决方案 »

  1.   

    根据我用Random产生int数测试Point的坐标,(999,999)出现的概率特别高。
      

  2.   

    可以放到代码里画图测试一下啊。
    我的猜测是:如果第一种情况是像你说的(x0,y0),(point.x,point.y),(x1,y1)共线
    那么else的情况应该是:(x0,y0)(x1,y1)所成直线与(point.x,point.y)所在直线是相交线,且point.x,point.y所在直线斜率为unknow
      

  3.   

      首先else里(Point.x,Point.y)肯定不是两线的交点;
       根据  point.y = j * point.x + k;知道(Point.x,Point.y)点一定在  斜率为unknown,截距为x的直线上。若如9楼所说 是个线性问题的话(把(x0,y0)与(x1,y1)看成组成直线的两点),那
     point.x = (int)Math.round(((double)(x1 - x0) * (double)(y0 - x) - (double)((y1 - y0) * x0)) / (double)(unknow * (x1 - x0) + (y0 - y1))); 
     point.y = unknow * point.x + x; 
    这一点到底表示的是什么意思呢~?有没有几何解释呢~还望大家再想想~
      

  4.   

    根据point.y = unknown * point.x + x;
      

  5.   

    如果X0,X1,Y0,Y1每次传值都不变,就是映射。将X0,Y0,X1,Y1上的点映射到另一条直线上,没有其他意义。你自己会画图就试试。浅显容易。
    如果变化的话,就看X0,Y0,X1,Y1怎么规律变化。如果有某种规律,那么可以是任何情况。
    具体代码想做什么,那么就看所有代码的意思了。
      

  6.   

    www.sxshow.com  看看就知道了!