Actually, looking at the 3d version -- I'm not sure which way is better.

Did you try just using duals to get the derivative versions?