In theory this should be possible using either GRASS r.mapcalc or SAGA raster calculator.
I'll assume you have a single origin point for this.
However I've not been able to get this to work, but I'll leave this here in case someone can suggest improvements/corrections, or it sets you off in the right direction.
To get this to work you'll need an origin x and y values and your raster calculator needs to
- be able to use the geographic x and y coordinates in the function (question 1)
- have an atan2 function (or atan) to be able to compute the azimuth to the origin
Both GRASS and SAGA tick both boxes.
- In GRASS, use
y() to get current pixel coordinate
- In SAGA use
ypos() to get the same
QGIS doesn't seem to support geographic coordinates as part of the formula, but does support atan. So QGIS raster calculator is no use here. (Someone correct me if I'm wrong)
From this source, I think the function should look something like (in GRASS)
90 - ((180/PI) * atan2( y()-origin_y, x()-origin_x))
Replace origin_y and origin_x with the coords of the point.
As I said, I've not got this to work (and in some cases it crashes QGIS completely, although I found that making sure the origin point is not exactly on a pixel centre fixes that).
Note that cartesian approach like this is suitable for small areas on a UTM projection. If you're working with lat/lon or over larger areas, you'd need a different approach.