Given the n + 1 vertices x[0], y[0] .. x[N], y[N] of a simple polygon described in a clockwise direction, then the polygon's area can be calculated by:

abs( (sum(x[0]*y[1] + ... x[n-1]*y[n]) + x[N]*y[0]) -
     (sum(x[1]*y[0] + ... x[n]*y[n-1]) + x[0]*y[N])
   ) / 2
(Where abs returns the absolute value)

Task

Write a function/method/routine to use the the Shoelace formula to calculate the area of the polygon described by the ordered points:

     (3,4), (5,11), (12,8), (9,5), and (5,6) 



Show the answer here, on this page.




#COMPILE EXE
#DIM ALL
#COMPILER PBCC 6
 
FUNCTION ShoelaceArea(x() AS DOUBLE, y() AS DOUBLE) AS DOUBLE
LOCAL i, j AS LONG
LOCAL Area AS DOUBLE
 
  j = UBOUND(x())
  FOR i = LBOUND(x()) TO UBOUND(x())
    Area += (y(j) + y(i)) * (x(j) - x(i))
    j = i
  NEXT i
  FUNCTION = ABS(Area) / 2
END FUNCTION
 
FUNCTION PBMAIN () AS LONG
  REDIM x(0 TO 4) AS DOUBLE, y(0 TO 4) AS DOUBLE
  ARRAY ASSIGN x() = 3, 5, 12, 9, 5
  ARRAY ASSIGN y() = 4, 11, 8, 5, 6
  CON.PRINT STR$(ShoelaceArea(x(), y()))
  CON.WAITKEY$
END FUNCTION