请问大侠们一个算法问题,希望您给出代码,谢谢啦!
坐标系上有三个点(x1,y1)、(x2,y2)、(x3,y3),三个点不在一个直线上,现在(x1,y1)、(x2,y2)这两个点连成一个线,求(x3,y3)到这个直线的最短距离?

解决方案 »

  1.   

    从(x3, y3)点到(x1, y1)、(x2, y2)的垂直线最短,找找初中的数学书应该有
    作业题?
      

  2.   

    uses Math;
    function Get3Len(pt1,pt2,pt3:TPoint):Extended;
    var
      a,b,c:Extended;
    begin
      a:=ArcCos(pt3.X/sqrt(pt3.X*pt3.X+pt3.Y*pt3.Y)); //取得pt3和x轴的夹角
      //取得pt1,pt2直线和x轴的夹角
      b:=ArcCos(Abs(pt1.X-pt2.X)/sqrt((pt1.X-pt2.X)*(pt1.X-pt2.X)+(pt1.Y-pt2.Y)*(pt1.Y-pt2.Y)));
      c:=Abs(a-b); //两者相减,得到直线pt1pt3和直线pt1pt2的夹角
      //根据正弦原理y=r*sin(a)求得高
      result:=Sqrt((pt3.X-pt1.X)*(pt3.X-pt1.X)+(pt3.Y-pt1.Y)*(pt3.Y-pt1.Y))*sin(c);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      a:Extended;
      pt1,pt2,pt3:TPoint;
    begin
      pt1.X:=50;
      pt1.Y:=50;
      pt2.X:=60;
      pt2.Y:=150;
      pt3.X:=200;
      pt3.Y:=120;
      a:=Get3Len(pt1,pt2,pt3);
      ShowMessage(FloatToStr(a));
    end;