判断点与有向线段的关系

 
// 判断点与有向线段的关系
type
  TVertex = record x, y: Double; end;
//怎么判断坐标为(xp,yp)的点P是在直线的哪一侧呢?设直线是由其上两点(x1,y1)
//(x2,y2)确定的,直线方向是由(x1,y1)到(x2,y2)的方向。这时若直线方程记为
//Ax+By+C=0 则有: A=y2-y1; B=x1-x2; C=x2*y1-x1*y2;   这时可以计算D:
// D=A*xp+B*yp+C   若D<0,则点(xp,yp)在直线的左侧;若D>0,则点在直线的右侧;
//D=0点在直线上。
function DotToLine(aDot, aLineP1, aLineP2: TVertex): Double;
var
  vA, vB, vC: double;
begin
  vA := aLineP2.y - aLineP1.y;
  vB := aLineP1.x - aLineP2.x;
  vC := aLineP2.x * aLineP1.y - aLineP1.x * aLineP2.y;
  Result := vA * aDot.x + vB * aDot.y + vC;
end;
const
  Vex: array[0..4] of TVertex =
    ((x:0;y:0), (x:4;y:4), (x:4;y:8), (x:5;y:4), (x:3;y:4));
procedure TForm1.FormCreate(Sender: TObject);
begin
  Caption := FloatToStr(DotToLine(Vex[0], Vex[1], Vex[3]));
end;
 

你可能感兴趣的:(职场,休闲,判断点,有向线段)