A nicely-spaced ASCII spiral Consider this spiral

###########
#
# #######
# #     #
# # ### #
# # # # #
# # # # #
# #   # #
# ##### #
#       #
#########


Starting in the centre:


The first line (upwards) has 3 characters.
The second line has the same number of characters (3)
Next, we add two chars (5) for the next two sides.
This pattern continues, two sides the same length then increase the length by 2.


I want to generate this spiral for N lines.


Write in any language.
The input/argument, etc. is the number of lines in your spiral.
Each line starts with the ending character of the previous line in the direction 90 degrees clockwise of the previous line.
I don't care how much whitespace is before or after each line, as long as the elements of the spiral line up.
Output text to draw the spiral with any non-whitespace character you choose.
Attempt to do this in the smallest number of bytes.


Test cases (using a hash as output):

N = 1

#
#
#


N = 2

###
#
#


N = 3

###
# #
# #
  #
  #


N = 10

###########
#
# #######
# #     #
# # ### #
# # # # #
# # # # #
# #   # #
# ##### #
#       #
#########
05AB1E, 13 11 bytes

Code:

Thanks to Emigna for saving two bytes!

LDÈ-Ì'#3Ý·Λ


Uses the 05AB1E encoding. Try it online!

Explanation

The lengths of each individual edge on the spiral starts with length 3 and gradually increases every two steps by two:

$$
3, 3, 5, 5, 7, 7, 9,\dots
$$

For a spiral with \$n\$ edges, we just need to trim this list to size \$n\$. This is done with the following piece of code:

L                # Create a list from [1 .. input]
 DÈ              # Duplicate and check for each number if even
   -             # Subtract that from the first list
    Ì            # Add 2


This basically gives us the desired list of lengths.

     '#          # Push the '#' character
       0246S     # Push the array [0, 2, 4, 6]
            Λ    # Write to canvas


The canvas works as a function that pops three parameters (where the rightmost parameter is popped first): &lt;length(s)&gt;, &lt;char(s)&gt;, &lt;direction(s)&gt;. The directions parameter is in this case a list of numbers. The numbers that correspond to the directions are:

$$
\left[\begin{array}{r}
7 &amp; 0 &amp; 1 \\
6 &amp; \circ &amp; 2 \\
5 &amp; 4 &amp; 3
\end{array}\right]
$$

In this case, [0, 2, 4, 6] corresponds to the directions list [↑, →, ↓, ←]. The canvas iterates over each length retrieved from the list of lengths, uses the '#' character and cyclically iterates over the directions list.