Математика индексов матрицы

Общий код:

const
  N = {size};

var
  A: array [0..N - 1, 0..N - 1] of integer;

function Predicate(i, j: integer) := {predicate};

procedure Fill();
begin
  for var i := 0 to N - 1 do
    for var j := 0 to N - 1 do
      if Predicate(i, j) then
        A[i, j] := 1;
end;

procedure Print();
begin
  for var i := 0 to N - 1 do
  begin
    for var j := 0 to N - 1 do
      Write(A[i, j]:5);
    Writeln();
  end;
end;

begin
  Fill();
  Print();
end.
Диагональ Формула предиката
главная
i = j
побочная
i = N - j - 1
диагональ, параллельная главной
i = j + D
диагональ, параллельная побочной
i = N - j - 1 + D

D - смещение вверх или вниз относительно диагонали (если D > 0, то смещение вниз, если меньше - вверх). Причина - ось Y направлена вниз.

MatrixD2.png