I am speculating that the issue is the offset from the correct frequencies in the fequency domain plot. The culprit is the linspace statements, which define the frequency grid with slightly incorrect spacing.
The code below takes up where your linspace statements are, and defines the frequencies in a similar manner as you did for the spacial array. In fig(2) the frequency peaks are now centered exactly where they should be, i.e. (0, .2), (0, -.2), (-.2, 0) and (.2, 0). In case you don't like the look of the funny hexagonal spots, which are due to some manipulation by pcolor, fig(3) shows individual pixels of abs(fftshift(T)), which are in the correct locations.
The two repmat statements can be replaced by a single meshgrid statement as below. In that case fyy can be defined as a row vector because meshgrid will accept either row or column.
fxx = ((-N/2:N/2-1)/N)*Ws;
fyy = ((-N/2:N/2-1)/N)*Ws;
[fx fy] = meshgrid(fxx,fyy);