Lines
Different incarnations and names
Pretty easy to form the origin-destination pairs.
Start at a point.
Throw in horizontal and/or vertical offsets.
A dash of an azimuth/bearing.
A tad of NumPy
A bit of Arcpy and....

A good way to spend some time, so you write it down because you will forget and reinvent it later.
Almost forgot...
There is always one student that thinks outside the box.
Hmmmm could be a bonus here... I wonder if any of mine can replicate the compass with 10 degree increments?

In the attached code, I made these changes
rads <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>deg2rad<SPAN class="punctuation token">(</SPAN>bearing<SPAN class="punctuation token">)</SPAN>
dx <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>sin<SPAN class="punctuation token">(</SPAN>rads<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">*</SPAN> dist
dy <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>cos<SPAN class="punctuation token">(</SPAN>rads<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">*</SPAN> dist
<SPAN class="comment token">#</SPAN>
n <SPAN class="operator token">=</SPAN> len<SPAN class="punctuation token">(</SPAN>bearing<SPAN class="punctuation token">)</SPAN>
N <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>N<SPAN class="punctuation token">,</SPAN> n<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">[</SPAN>n<SPAN class="operator token">></SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># either the number of lines or bearings</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
And used this
b = np.arange(0, 361, 22.5)
a, data =transect_lines(N=1, orig=[some x, some y],
dist=100, x_offset=0, y_offset=0,
bearing=b, as_ndarray=True)<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
You can't have it both ways in a manner of speaking. By limiting N to number of bearings, you use numpy to generate the desired angles,. There is no x or y offset since the origin is now fixed.
How to use the attached...
<SPAN class="string token">""</SPAN>" <SPAN class="operator token">-</SPAN><SPAN class="operator token">-</SPAN><SPAN class="operator token">-</SPAN><SPAN class="operator token">-</SPAN> use these <SPAN class="keyword token">as</SPAN> your inputs<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">with</SPAN> edits of course
<SPAN class="comment token"># ---- make the x, y coordinate table</SPAN>
SR <SPAN class="operator token">=</SPAN> <SPAN class="number token">2951</SPAN> <SPAN class="comment token"># a projected coordinate system preferably</SPAN>
a<SPAN class="punctuation token">,</SPAN> data <SPAN class="operator token">=</SPAN>transect_lines<SPAN class="punctuation token">(</SPAN>N<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> orig<SPAN class="operator token">=</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">299000</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="number token">5000000</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> dist<SPAN class="operator token">=</SPAN><SPAN class="number token">100</SPAN><SPAN class="punctuation token">,</SPAN>
x_offset<SPAN class="operator token">=</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> y_offset<SPAN class="operator token">=</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN> bearing<SPAN class="operator token">=</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">10</SPAN><SPAN class="punctuation token">,</SPAN> as_ndarray<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN>
p0 <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"C:\Your_path\Your.gdb\a_tbl"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>NumPyArrayToTable<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> p0<SPAN class="punctuation token">)</SPAN>
<SPAN class="comment token"># ---- now for the lines</SPAN>
p1 <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"C:\Your_path\Your.gdb\some_lines"</SPAN>
arcpy<SPAN class="punctuation token">.</SPAN>XYToLine_management<SPAN class="punctuation token">(</SPAN>p0<SPAN class="punctuation token">,</SPAN> p1<SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'X_from'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Y_from'</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">'X_to'</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'Y_to'</SPAN><SPAN class="punctuation token">,</SPAN>
spatial_reference<SPAN class="operator token">=</SPAN>SR<SPAN class="punctuation token">)</SPAN>
<SPAN class="string token">""</SPAN>"<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
PS
The python/numpy part is quite speedy, using variants of
%timeit transect_lines(N=10, orig=[0,0], dist=1, x_offset=0, y_offset=0, bearing=0, as_ndarray=True)
That is microseconds for the speed geeks. I couldn't see a use case to test for larger arrays.
N Time
10 36.0 µs ± 309 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
50 39.3 µs ± 3.4 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
100 42.9 µs ± 6.57 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
500 46.5 µs ± 502 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
1000 54.9 µs ± 1.39 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
I didn't bother to test the featureclass creation since I have no control over that.