## CalcEdgePath

 Declaration: CalcEdgePath (EdgeMat: TInt2DArray; AnchorX, AnchorY: integer; var EdgePath: TPDblArray): integer; The function CalcEdgePath calculates the polynomial along the edge of a region. The edge has to be specified in the matrix EdgeMat. The edge pixels are represented by non-zero values. The parameters AnchorX and AnchorY define the coordinates of an arbitrary pixel of the edge. The variable parameter EdgePath returns the polygon path. Please note that the returned polygon distinguishes between the left and the right part (or the upper and lower part) of a pixel. Left and bottom parts of a pixel are indicated by and offset of 0.25, right and top parts by 0.75. The function returns the number of vertices of the found polygon.

 Sample Program: The following short example creates an artificial region and calculates its polygonal shape along the edge of this region: ```program ParticleEdgeVector; const PAGE = 1; var i, j : integer; Region : TInt2Darray; EdgePixels : TInt2Darray; Anchorx : integer; AnchorY : integer; EdgePath : TPDblArray; begin ResizeIntMatrix (region, 30,30); FillIntMatrix(region,0); Region[1][9] := 1; // define the particle Region[2][9] := 1; Region[2][8] := 1; Region[2][7] := 1; Region[1][7] := 1; Region[3][8] := 1; Region[3][9] := 1; Region[3][10] := 1; Region[2][11] := 1; Region[3][11] := 1; Region[4][11] := 1; Region[3][7] := 1; Region[4][9] := 1; Region[4][8] := 1; Region[4][7] := 1; Region[5][9] := 1; Region[5][8] := 1; Region[6][8] := 1; Region[7][9] := 1; Region[7][8] := 1; Region[7][7] := 1; Region[3][6] := 1; Region[4][6] := 1; Region[5][6] := 1; Region[4][5] := 1; Region[5][5] := 1; Region[4][4] := 1; Region[4][3] := 1; // create the edge CreateEdgeOfParticle (1,Region,EdgePixels, anchorx, anchory); // calculate the edge polygon CalcEdgePath (EdgePixels, AnchorX, AnchorY, EdgePath); // display the results ChartBook.Reset; ChartBook.TabCaption[PAGE] := 'Edge'; ChartBook.Configure (PAGE, // page 1 true, true, false, // only chart and table are visible 250, 250); // default width & height ChartBook.TabCaption[PAGE] := 'Cross Section'; with ChartBook.Charts[PAGE] do begin Reset; DataColor := clBlack; // indicate edge pixels for i:=1 to length(Region) do for j:=1 to length(Region[0]) do if Region[i-1][j-1] = 0 then MarkAt (i-1, j-1, 0) else MarkAt (i-1, j-1,26); DataColor := clRed; // draw polygon MoveTo (EdgePath[0].x,EdgePath[0].y); for i:=1 to length(EdgePath) do DrawTo (EdgePath[i-1].x,EdgePath[i-1].y); AutoRange (1,4); Update; end; with ChartBook.Tables[PAGE] do begin // list the polygon SuppressPaint := true; Clear; NrOfRows := length(EdgePath); Header[1] := 'X'; Header[2] := 'Y'; for i:=1 to length(EdgePath) do begin Elem [1,i] := strff(EdgePath[i-1].x,1,2); Elem [2,i] := strff(EdgePath[i-1].y,1,2); end; SuppressPaint := false; end; end. ```