Skip to main content
1 of 2
uhoh
  • 30.7k
  • 9
  • 98
  • 313

This is a partial answer.

Each small mirror will impose its own strong six-spiked diffraction pattern in the telescopes point-spread function. For telescope apertures build from a large number of hexagonal mirrors this will dominate the point-spread function.

The choice of pattern for the tiling of small mirrors to fill the full aperture will have a much smaller effect.

JWST simulated point spread function from James Webb Space Telescope User Documentation's NIRCam Point Spread Functions

WST simulated point spread function

I found an analytical expression for the diffraction pattern from (or at least the Fourier transform of) a single hexagonal aperture (or flat mirror) in this answer to How does Fraunhofer diffraction depend on the orientation of the sides of a lens? in Physics SE.

Hexagonal aperture. I take the following function: $$ \begin{split} h(x,y) = \left[\theta(2y+\sqrt{3})-\theta(2y-\sqrt{3})\right]\cdot \left[\theta(y-\sqrt{3}(x-1))-\theta(y-\sqrt{3}(x+1))\right]\cdot\\ \left[\theta(y-\sqrt{3}(-x-1))-\theta(y-\sqrt{3}(1-x))\right] \end{split}$$ With $\theta(x)$ -- is a [Heaviside step function][2].
While it is in principle possible to calculate the Fourier transform of this by hand, I've just fed it to CAS and I've got something like this: $$\frac{2\sqrt{3}\omega_x\left(\cos\frac{\omega_x}{2}\cos\frac{\sqrt{3}\omega_y}{2} -\cos\omega_x\right)-6\omega_y\sin\frac{\omega_x}{2}\sin\frac{\sqrt{3}\omega_y}{2}} {\pi \omega_x(\omega_x^2-3\omega_y^2)}$$ ...plus some singular terms that I've dropped.
Plotting square of the result (from -100 to 100)

Here's my plot and a python script based on that expression:

diffraction from a hexagonal aperture

import numpy as np
import matplotlib.pyplot as plt

def hexamp(omx, omy):
    """diffraction amplitude hexagonal aperture from
    https://physics.stackexchange.com/a/9910/83380"""
    C, S = np.cos, np.sin
    rt3 = np.sqrt(3)
    
    term_1 = 2 * rt3 * omx * (C(omx/2.)*C(rt3*omy/2.) - C(omx))
    
    term_2 = -6 * omy * S(omx/2.) * S(rt3*omy/2.)

    bottom = np.pi * omx * (omx**2 - 3.*omy**2)

    return (term_1 + term_2)/bottom

omega = np.arange(-100, 100, 0.1)
omx, omy = np.meshgrid(omega, omega)

amplitude = hexamp(omx, omy)

I = np.abs(amplitude)**2

if True:
    plt.figure()
    plt.imshow(np.log10(I), cmap='gray', vmin=-6)
    plt.gca().set_aspect('equal')
    plt.gca().axes.xaxis.set_ticklabels([])
    plt.gca().axes.yaxis.set_ticklabels([])
    plt.colorbar()
    plt.title('log10(I)', fontsize=14)
    plt.show()
uhoh
  • 30.7k
  • 9
  • 98
  • 313