已知屏幕上的p1,p2两个点,求指定y坐标的p1,p2左右延长线x坐标位置!!!
谢谢谢谢

解决方案 »

  1.   

    思路简单啊,只要证明(x,y)和p1、p2在同一条线上就可以了。
      

  2.   

    首先计算直线的斜率。比如数学上的y = k*x方程。根据两个已知点坐标,可以得到k的值。k = (p1.y-p2.y)/p1.x-p2.x)。如果p1.x = p2.x的话,那么这是一条垂直线,不用计算了,直接就可以return p1.x了。
    既然有了y = kx方程,而k已经计算出来了,y又是已知的,那么计算x应该非常容易了吧
      

  3.   

    同意happyparrot(快乐鹦鹉)
    我想应该不是很难理解吧
      

  4.   

    happyparrot(快乐鹦鹉):
    我按照你的算法做了,这是程序代码,不过我发现计算出来的x值误差太大了,连接点基本就是一个曲线。还有什么好办法解决嘛?
          
             CPoint p1(60,100);
    CPoint p2(150,200); pDC->MoveTo(p1);
    pDC->LineTo(p2); double k = (p1.y-p2.y)/(p1.x-p2.x);
    int y = 300;
    double x = y / k; pDC->MoveTo(p2);
    pDC->LineTo(x,y);
      

  5.   

    double k = (p1.y-p2.y)/(p1.x-p2.x);
    =================
    这一句需要修改:
    double k = (p1.y-p2.y)/(double)(p1.x-p2.x);
    强制转换成double再计算。否则由于p1和p2都是整数,导致除法得到的结果是整除的结果,没有小数。
      

  6.   

    double k = ((double)(p1.y-p2.y))/((double)(p1.x-p2.x));
    double y = 300;
    double x = y / k;以上是我该过的代码,不过效果仍然不明显,画出来的延长线仍然是曲线啊