Skip to main content
correction to the formula
Source Link
Syed
  • 59.5k
  • 5
  • 40
  • 95
f[x_, y_, c1_, c2_, R_] := 
 FunctionExpand@HeavisidePi[1UnitBox[(1/(2 RR^2)) ((x - c1)^2 + (y - c2)^2)]

Instead of the HeavisidePi, I am using UnitBox as advised by @user64494 with a correction to the formula suggested by @UlrichNewmann. Thanks to both.

f[x_, y_, c1_, c2_, R_] := 
 FunctionExpand@HeavisidePi[1/(2 R) ((x - c1)^2 + (y - c2)^2)]
f[x_, y_, c1_, c2_, R_] := 
 UnitBox[(1/(2 R^2)) ((x - c1)^2 + (y - c2)^2)]

Instead of the HeavisidePi, I am using UnitBox as advised by @user64494 with a correction to the formula suggested by @UlrichNewmann. Thanks to both.

Source Link
Syed
  • 59.5k
  • 5
  • 40
  • 95

Here is another (hopefully better) attempt, but first tackle a simpler case as a demo of the workflow.

p1 = Plot3D[HeavisidePi[1/2 (x^2 + y^2)], {x, -2, 2}, {y, -2, 2}
   , PlotStyle -> Darker@Cyan
   , ImageSize -> 300
   , AxesLabel -> Automatic
   , Exclusions -> All
   , ExclusionsStyle -> HatchShading[.4, Darker@Cyan]
   , SphericalRegion -> True
   , PlotRangePadding -> Scaled[.05]
   ];

FourierTransform[
  FunctionExpand@HeavisidePi[1/2 (x^2 + y^2)], {x, 
   y}, {ω1, ω2}] // FunctionExpand

$\frac{I_1\left(\sqrt{-\text{$\omega $1}^2-\text{$\omega $2}^2}\right)}{\sqrt{-\text{$\omega $1}^2-\text{$\omega $2}^2}}$

p2 = Plot3D[BesselI[1, Sqrt[-ω1^2 - ω2^2]]/
   Sqrt[-ω1^2 - ω2^2]
   , {ω1, -10, 10}
   , {ω2, -10, 10}
   , PlotStyle -> ColorData["HTML", "Aquamarine"]
   , PlotRange -> {-0.2, 0.6}
   , ImageSize -> 300
   , AxesLabel -> Automatic
   , PlotPoints -> 20
   , MaxRecursion -> 2
   , SphericalRegion -> True
   , PlotRangePadding -> Scaled[.05]
   ];

Grid[{{p1, p2}}]

enter image description here


Comments on the more general case

Using a function with a disk of radius R and situated at an offset:

f[x_, y_, c1_, c2_, R_] := 
 FunctionExpand@HeavisidePi[1/(2 R) ((x - c1)^2 + (y - c2)^2)]

While computing the Fourier transform, this evaluates instantly but with c1=0 and c2=0. Note that the radius can be set differently.

FourierTransform[
  f[x, y, 0, 0, 1], {x, y}, {ω1, ω2}] // FunctionExpand

A workaround (check!) can be to add an offset to ω1 and ω2 after the transform calculation in order to shift the center of the 3D sinc-like plot. As an example:

FourierTransform[
   Evaluate@f[x, y, 0, 0, 3], {x, 
    y}, {ω1, ω2}] /. {ω1 -> ω1 - 
     1, ω2 -> ω2 - 1/2 } // FunctionExpand

I cannot comment on its math correctness so you can check or devise another strategy to evaluate the Fourier transform. I am not aware of such a strategy at this point. Perhaps the transform will evaluate after several minutes more and I haven't waited for more than five minutes on my machine before quitting the calculation.