Hexagonal coordinates: Polar to Cartesian
JavaScript (ES6), 93 bytes

(r,d)=&gt;[...Array(d+r*6)].map((_,i)=&gt;x+="431013"[y+="122100"[i=i/r%6|0]-1,i]-2,x=y=-r)&amp;&amp;[x,-y]


Test snippet:



f=(r,d)=&gt;[...Array(d+r*6)].map((_,i)=&gt;x+="431013"[y+="122100"[i=i/r%6|0]-1,i]-2,x=y=-r)&amp;&amp;[x,-y]

g=([r,d],e)=&gt;console.log(`f(${r},${d}):`, `[${f(r,d)}]`, "expected:", `[${e}]`)

g([0,0],[0,0])
g([1,2],[2,0])
g([6,0],[-6,6])
g([2,-3],[-3,-1])
g([4,23],[-5,3])
g([5,-3],[-8,2])
g([10,50],[-20,0])
g([6,10],[10,2])
g([8,28],[0,-8])
g([8,-20],[0,-8])