Bucle espiral en una matriz desde un punto

Tengo una cuadrícula 2D de la siguiente manera y quiero comenzar desde X, Y y guardar la esquina de una ventana (W) y la superposición de (OP). Yo he tratadoestas códigos, pero ninguno de ellos se ajusta a mi propósito.

Como se demuestra, quiero comenzar desde un punto aleatorio (celda negra) y guardar las ubicaciones de las esquinas (mostradas por círculos negros) de cada nueva ventana en un bucle espiral. El algoritmo debe usarse para cualquier tamaño de cuadrícula (no necesariamente cuadrado) y cualquier ubicación de punto de inicio.

Matlab también tiene una función (espiral) que es similar a lo que quiero, pero no toma una cuadrícula, tamaño de ventana y superposición (OP).

Espero tener el siguiente resultado para esta figura: (8,12) (11,12) (11,9) (8,9) (4,9) (4,12) (4,15) ...

Estoy usando los siguientes códigos que comienzan desde una esquina y llenan la matriz paso a paso usando el tamaño W, OP y Matrix definido:

W = [10 12];
OP = [4 3];

M = zeros(100,110);

for i=[1:W(1)-OP(1):size(M,1)-W(1), size(M,1)-W(1)+1]
  for j=[1:W(2)-OP(2):size(M,2)-W(2), size(M,2)-W(2)+1]
      block = rand(W(1),W(2));
      M(i:i+W(1)-1, j:j+W(2)-1) = block;
      imagesc(M); axis equal tight xy
      pause(.1)
  end;
end;

Entonces, de una manera más clara, ¿cómo debo cambiar el código "anterior" para comenzar desde una ubicación (x, y) y llenar en espiral toda la matriz de acuerdo con W, OP y tamaño (M).

¡Gracias!

Respuestas a la pregunta(2)

Su respuesta a la pregunta