+ // 's' must be odd.
+ let octagon (s: int) : Matrix<byte> =
+ if s % 2 = 0 then failwith "s must be odd"
+ let m = new Matrix<byte>(Array2D.create s s 1uy)
+ let r = (float s) / (Math.Sqrt 2. + 2.) |> roundInt
+ for i in 0 .. r - 1 do
+ for j in 0 .. r - 1 do
+ if i + j < r
+ then
+ m.[i, j] <- 0uy
+ m.[s - i - 1, j] <- 0uy
+ m.[i, s - j - 1] <- 0uy
+ m.[s - i - 1, s - j - 1] <- 0uy
+ m
+