Current section

Files

Jump to
griddler2d lib core.ex
Raw

lib/core.ex

defmodule Griddler2D.Core do
alias Griddler2D.Cell
alias Griddler2D.Line
def build_grid(nx, ny, step \\ 1) do
for y <- 0..ny do
for x <- 0..nx do
{x * step, y * step}
end
end
end
def cells(grid) do
grid
|> Enum.chunk_every(2, 1, :discard)
|> Enum.flat_map(fn [row1, row2] ->
Enum.zip(row1, row2)
|> pairwise()
|> Enum.map(fn [{{x1, y1}, {x2, y2}}, {{x3, y3}, {x4, y4}}] ->
%Cell{corners: [{x1, y1}, {x3, y3}, {x4, y4}, {x2, y2}]}
end)
end)
end
def lines(grid) do
horizontal =
grid
|> Enum.flat_map(fn row ->
pairwise(row)
|> Enum.map(fn [a, b] -> %Line{start: a, end: b} end)
end)
vertical =
grid
|> Enum.zip()
|> Enum.flat_map(fn col ->
col
|> Tuple.to_list()
|> pairwise()
|> Enum.map(fn [a, b] -> %Line{start: a, end: b} end)
end)
horizontal ++ vertical
end
defp pairwise(list) do
Enum.chunk_every(list, 2, 1, :discard)
end
end