我这有一个函数!是用直线方程求两直线夹角的方法!
注意:
Bpos是角顶点的坐标,其他2个是2边上的点坐标;
Angle***是常数,Angle180 = 3.1415926……;Angle90 = Angle180/2;
返回值是Real,用(它/Angle180)*180=角度;
注意:
用法!是反时针取点!
例如:求一4边形4内角;
左上角: APos=右上顶点坐标,Cpos=左下顶点坐标;
左下角: APos=左上顶点坐标,Cpos=右下顶点坐标;
右上角: APos=右下顶点坐标,Cpos=右上顶点坐标;
右下角: APos=左下顶点坐标,Cpos=右上顶点坐标;
你可以加一些代码来判断!很容易的!
如果取反了角度是负数!例本来是45度,取出来变成135,本是135,却变成45
Function GetAnglein(const APos,Bpos,Cpos:Tpoint):Real;
var
A1,A2,B1,
B2,C1,C2 : Real;
x1,x2,y1,
y2 : smallint;
begin
X1:=apos.X-bpos.X;
X2:=Cpos.X-bpos.X;
Y1:=apos.Y-bpos.Y;
Y2:=Cpos.Y-bpos.Y;
if X1=0 then
begin
B1:=0;
A1:=1;
C1:=-(Apos.X);
end else
begin
if Y1=0 then
begin
B1:=1;
A1:=0;
C1:=-(apos.Y);
end else
begin
A1:=Y1/X1;
B1:=-1;
C1:=-(A1*Apos.X-apos.Y);
end;
end;
if X2=0 then
begin
B2:=0;
A2:=1;
C2:=-(Cpos.X);
end else
begin
if Y2=0 then
begin
B2:=1;
A2:=0;
C2:=-(Cpos.Y);
end else
begin
A2:=Y2/X2;
B2:=-1;
C2:=-(A2*cpos.X-Cpos.Y);
end;
end;
if (A1*A2+B1*B2)= 0 then // angleSize;
result:=Angle90 else
result:=arctan((A1*B2-A2*B1)/(A1*A2+B1*B2));
if result< 0 then
result:=angle180+result.AngleSize else
if result= 0 then
begin
if x1=0 then
begin
if Y1*Y2 >= 0 then
result:= 0 else
result:= angle180;
end else
begin
if X1*X2 >= 0 then
result:= 0 else
result:= angle180;
end;
end;
end;