Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсач / SquareFinder

.pas
Скачиваний:
27
Добавлен:
08.03.2015
Размер:
2 Кб
Скачать
☆
unit SquareFinder;

interface

uses DynStruct;

function FindSquares( listRoot : pPointNode ) : pSquareNode;

implementation

const
  eps = 0.001;

function vecLength( v : tPoint ) : real;
begin
  result := sqrt( v.X * v.X + v.Y * v.Y );
end;

function vecOrth( v1, v2 : tPoint ) : boolean;
begin
  result := ( v1.X * v2.X + v1.Y * v2.Y ) = 0;
end;

function FindSquares( listRoot : pPointNode ) : pSquareNode;
var tz1, tz2, tz3, tz4 : pPointNode;
    v1, v2, v3, v4 : tPoint;
    v1l, v2l, v3l, v4l : real;
    Squares : pSquareNode;
begin
  Squares := InitSquareList;

  tz1 := listRoot^.Next;
  while tz1 <> nil do
  begin

    tz2 := listRoot^.Next;
    while tz2 <> nil do
    begin
      v1.X := tz2^.Point.X - tz1^.Point.X;
      v1.Y := tz2^.Point.Y - tz1^.Point.Y;
      v1l := vecLength( v1 );
      if ( v1l > eps ) then
      begin
        tz3 := listRoot^.Next;
        while tz3 <> nil do
        begin
          v2.X := tz3^.Point.X - tz2^.Point.X;
          v2.Y := tz3^.Point.Y - tz2^.Point.Y;
          v2l := vecLength( v2 );

          if ( vecOrth( v1, v2 ) ) and ( v1l - v2l <= eps ) then
          begin
            tz4 := listRoot^.Next;
            while tz4 <> nil do
            begin
              v3.X := tz4^.Point.X - tz3^.Point.X;
              v3.Y := tz4^.Point.Y - tz3^.Point.Y;
              v3l := vecLength( v3 );

              if ( vecOrth( v2, v3 ) ) and ( v2l - v3l <= eps ) then
              begin
                v4.X := tz4^.Point.X - tz1^.Point.X;
                v4.Y := tz4^.Point.Y - tz1^.Point.Y;
                v4l := vecLength( v4 );

                if ( vecOrth( v3, v4 ) ) and ( v3l - v4l <= eps ) then
                begin
                  AddSquareNode( Squares, tz1^.Point, tz2^.Point, tz3^.Point, tz4^.Point );
                end;

              end;

              tz4 := tz4^.Next;
            end;
          end;

          tz3 := tz3^.Next;
        end;
      end;
      tz2 := tz2^.Next;
    end;
    tz1 := tz1^.Next;
  end;

  result := Squares;
end;

end.
Соседние файлы в папке курсач
  • #
    08.03.20152 Кб28Project1.dof
  • #
    08.03.2015260 б28Project1.dpr
  • #
    08.03.20152 Кб27Project1.dsk
  • #
    08.03.2015876 б27Project1.res
  • #
    08.03.20152 Кб27SquareFinder.dcu
  • #
    08.03.20152 Кб27SquareFinder.pas
  • #
    08.03.20152 Кб29SquareFinder1.txt
  • #
    08.03.20152 Кб27Unit1.~dfm
  • #
    08.03.20156 Кб27Unit1.~pas
  • #
    08.03.20159 Кб27Unit1.dcu
  • #
    08.03.201551 б27Unit1.ddp