已知一条线(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)...很高手指点...
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)...很高手指点...
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-”去掉也可,无非是坐标轴是反的。