Uiua
Getting closer to an elegant solution, but still a way to go...
Grid ← ⊜∘⊸≠@\n "............\n........0...\n.....0......\n.......0....\n....0.......\n......A.....\n............\n............\n........A...\n.........A..\n............\n............"
Pairs ← ∧(⊂⧅≠2⊚⌕)⊙¤⊸(◴▽⊸≠@.♭)Grid[] # get pairs of nodes in grid (both ways round).
InGrid ← ▽≡/××<⧻Grid:≥0.. # (posns) Keeps those in range.
AntiNodes ← ↯∞_2≡(+¤⊙(פ)⊃⊣/-):¤ # (range, pairs) Find antinodes by taking offset, mul by range, add to last node, check it's in grid.
&p ⧻InGrid◴ AntiNodes ↘1⇡2 Pairs
&p ⧻InGrid◴ AntiNodes ↘0⇡50 Pairs