Files
rose-ash/lib/ocaml/baseline/polygon_area.ml
giles 62712accdd
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 23s
ocaml: phase 5.1 polygon_area.ml baseline (pentagon 2x area = 32)
Shoelace formula on a pentagon with integer vertices:

  pts = [(0,0); (4,0); (4,3); (2,5); (0,3)]

  2 * area = | Σ (x_i * y_{i+1} - x_{i+1} * y_i) |
           = | 0*0 - 4*0 + 4*3 - 4*0 + 4*5 - 2*3 + 2*3 - 0*5
                + 0*0 - 0*3 |
           = 32

Returns the doubled form (32) to stay integral.

Tests:
  - let (x1, y1) = arr.(i) in   -- tuple destructure from array
  - arr.((i + 1) mod n)         -- modular wrap-around index
  - if a < 0 then - a else a    -- prefix - negation

162 baseline programs total.
2026-05-10 22:47:22 +00:00

18 lines
368 B
OCaml

let pts = [(0, 0); (4, 0); (4, 3); (2, 5); (0, 3)]
let polygon_2area pts =
let arr = Array.of_list pts in
let n = Array.length arr in
let acc = ref 0 in
for i = 0 to n - 1 do
let (x1, y1) = arr.(i) in
let (x2, y2) = arr.((i + 1) mod n) in
acc := !acc + x1 * y2 - x2 * y1
done;
let a = !acc in
if a < 0 then - a else a
;;
polygon_2area pts