2 using System.Windows.Media.Imaging;
\r
6 public static class Figures
\r
9 public static void drawGrating(double wavelength, double contrast, double orientation, double phase)
\r
11 double freq = 2 * Math.PI / wavelength;
\r
12 Canvas.default_buffer.ForEach(
\r
13 (x, y) => new Color(.5 + .5 * Math.sin(phase + (Math.sin(orientation) * x - Math.cos(orientation) * y) * freq))
\r
17 public static void drawGrating(ref Image img, int width, int height, double wavelength, double contrast, double orientation, double phase)
\r
19 double width_half = width / 2.0, height_half = height / 2.0;
\r
20 if (img==null || img.width != width || img.height != height)
\r
21 img = new Image(width, height);
\r
22 double freq = 2 * Math.PI / wavelength;
\r
24 (x, y) => new Color(.5 +.5 * Math.sin(phase + (Math.sin(orientation)*x-Math.cos(orientation)*y) * freq))
\r
27 public static void drawGaussian(ref Image img, double sigma, double factor)
\r
29 int width = (int)(sigma * 8), height = (int)(sigma * 8);
\r
30 double width_half = width / 2.0, height_half = height / 2.0;
\r
31 if (img == null || img.width != width || img.height != height)
\r
32 img = new Image(width, height);
\r
34 (x, y) => new Color(factor * Math.gaussian(Math.radius(x - width_half, y - height_half), width / 8.0))
\r
38 public static void drawGabor(ref Image img, double sigma, double wavelength, double contrast, double orientation, double phase)
\r
40 int width = (int)(sigma * 8), height = (int)(sigma * 8);
\r
41 double width_half = width / 2.0, height_half = height / 2.0;
\r
42 if (img==null || img.width != width || img.height != height)
\r
43 img = new Image(width, height);
\r
44 double freq = 2 * Math.PI / wavelength;
\r
46 (x, y) => new Color(.5 + Math.gaussian(Math.radius(x - width_half, y - height_half), width / 8.0) * .5 * Math.sin(phase + (Math.sin(orientation)*x-Math.cos(orientation)*y) * freq))
\r