已知一条线(x1,y1) (x2,y2) ,求经过(x1,y1)的垂直线我是这样写的if x1=x2 then
  k := 1
else
  k := abs(y2-y1)/abs(x2-x1);x3 := Trunc(x1*(-1/k)) + 20;
y3 := Trunc(y1*(-1/k)) + 20;垂直线就是 (x1,y1),(x3,y3)...很高手指点...

解决方案 »

  1.   

    以下测试正确。请楼主自己简化一下(移项即可)。另外,楼主一定要结贴啊,呵呵,证明一下你的信誉“分”低与你的信誉没有关系。var
      x1,y1,x2,y2,x3,y3 : integer;
      k1,k2 : double;procedure TForm1.Button1Click(Sender: TObject);
    begin
      x1 := 20;
      y1 := 30;
      x2 := 100;
      y2 := 60;
      image1.Canvas.MoveTo(x1,image1.Height-y1);
      image1.Canvas.LineTo(x2,image1.Height-y2);
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      k1 := (y2-y1)/(x2-x1);
      k2 := -1/k1;
      y3 := 0;
      x3 := Trunc((y3-y1)/k2 + x1);
      image1.Canvas.MoveTo(x1,image1.Height-y1);
      image1.Canvas.LineTo(x3,image1.Height-y3);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      image1.Height := 300;
      image1.Width := 300;
    end;解题思路:直线(x1,y1)-->(x2,y2)的斜率是 k1 = (y2-y1)/(x2-x1)
    于是直线(x1,y1)-->(x3,y3)的斜率就是 k2 = -1/k1
    于是假定y3等于0,则x3 = Trunc((y3-y1)/k2 + x1)上述代码中的“image1.Height-y”中,把“image1.Height-”去掉也可,无非是坐标轴是反的。