Trapezium / Home



...

Uses Math;

...

Function GetAngle(x1, y1, x2, y2: Real): Real;
Var L: Real;
Begin
L:=SQRT((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
If L<>0 Then
      If y2<=y1 Then
            GetAngle:=-ArcCos((x2-x1)/L)
      Else
            GetAngle:=ArcCos((x2-x1)/L)
Else
      GetAngle:=0; // точки совпадают (по идее должна быть ошибка)
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, AngAB, AngDC, AngBC, AngAD, n: Real;
Begin
Ax:=StrToFloat(Edit1.Text);
Ay:=StrToFloat(Edit2.Text);
Bx:=StrToFloat(Edit3.Text);
By:=StrToFloat(Edit4.Text);
Cx:=StrToFloat(Edit5.Text);
Cy:=StrToFloat(Edit6.Text);
Dx:=StrToFloat(Edit7.Text);
Dy:=StrToFloat(Edit8.Text);
AngAB:=GetAngle(Ax, Ay, Bx, By);
AngDC:=GetAngle(Dx, Dy, Cx, Cy);
AngBC:=GetAngle(Bx, By, Cx, Cy);
AngAD:=GetAngle(Ax, Ay, Dx, Dy);
n:=StrToFloat(Edit9.Text);
Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
Image1.Canvas.MoveTo(Round(Ax*n), Round(Ay*n));
Image1.Canvas.LineTo(Round(Bx*n), Round(By*n));
Image1.Canvas.LineTo(Round(Cx*n), Round(Cy*n));
Image1.Canvas.LineTo(Round(Dx*n), Round(Dy*n));
Image1.Canvas.LineTo(Round(Ax*n), Round(Ay*n));
// Не учитывая пересечения: ((Abs(AngAB-AngDC)<0.0000000005) Or (Abs(AngBC-AngAD)<0.0000000005))
// Учитывая пересечения: ((Abs(AngAB-AngDC)<0.00000000005) Or (Abs(AngBC-AngAD)<0.00000000005) Or (Abs(Abs(AngAB-AngDC)-Pi)<0.00000000005) Or (Abs(Abs(AngBC-AngAD)-Pi)<0.00000000005))
If ((Abs(AngAB-AngDC)<0.00000000005) Or (Abs(AngBC-AngAD)<0.00000000005) Or (Abs(Abs(AngAB-AngDC)-Pi)<0.00000000005) Or (Abs(Abs(AngBC-AngAD)-Pi)<0.00000000005)) Then
      Button1.Caption:='Yes'
Else
      Button1.Caption:='No';
End;

...



Hosted by uCoz