Plotting the Cornu spiral

MATL, 29 26 25 bytes

Thanks to @Adriaan for 3 bytes off!

Q:qG/q1e3YytP+1e6j*ZeYsXG

Here's an example with input 365 366... because today is MATL's first birthday! (and 2016 is a leap year; thanks to @MadPhysicist for the correction).

Or try it in MATL online! (experimental compiler; refresh the page if it doesn't work).

enter image description here

Explanation

Q:q    % Input N implicitly. Push range [0 1 ... N] (row vector)
G/     % Divide by N, element-wise
q      % Subtract 1. This gives NP projected onto the x axis for each mirror element
1e3    % Push 1000. This is NP projected onto the y axis
Yy     % Hypotenuse function: computes distance NP
tP     % Duplicate, reverse. By symmetry, this is the distance SN
+      % Add. This is distance SNP for each mirror element (row vector)
1e6j   % Push 1e6*1i
*      % Multiply
Ze     % Exponential
Ys     % Cumulative sum
XG     % Plot in the complex plane

MATLAB, 88 84 81 79 bytes

g=@(x)hypot(1e3,x);h=@(x)plot(cumsum(exp(1e6i*(g(x)+g(1-x)))));f=@(N)h(0:1/N:1)

Thanks @LuisMendo for -3 bytes, and @Adriaan for -2 bytes!

The function g is the distance function we use in SN and NP, and h does the rest of the calculation plus plotting. f the actual function we want and it produces the vector we need.

This is the output for N=1111

output for N=1111


GeoGebra, 107 bytes

1
1E6
InputBox[a]
Polyline[Sequence[Sum[Sequence[e^(i*b(((k/a)^2+b)^.5+((k/a-1)^2+b)^.5)),k,0,a],l],l,1,a]]

Each line is entered separately into the input bar. Input is taken from an input box.

Here is a gif of the execution:

Cornu spiral

How it works

Entering 1 and 1E6 implicitly assigns the values to a and b respectively. Next, the InputBox[a] command creates an input box and associates it with a.

The inner Sequence command iterates over integer values of k from 0 to a inclusive. For each value of k, the required distance is calculated using the expression ((k/a)^2+b)^.5+((k/a-1)^2+b)^.5). This is then multiplied by i*b, where i is the imaginary unit, and e is raised to the result. This yields a list of complex numbers.

After this, the outer Sequence performs the cumlative summation by iterating over integer values of l from 1 to a inclusive. For each value of l, the first l elements of the list are summed using the Sum command, again yielding a list of complex numbers.

GeoGebra treats the complex number a + bi as the point (a, b). Hence, the complex numbers can be plotted using the Polyline command, which joins all the points in the complex number list with straight line segments.