I want to create a Chinese-style curved roof programmatically, something like in the right part of this picture:

As seen in the picture, the roof appears to have four curved segments, which intersect at the diagonals.
I would appreciate a formula as starting point where I can tweak the parameters.





One (rather rough) starting point is the following surface, based on the Lamé curve:
$$\begin{align*}x&=v|\cos\,u|^p \cos\,u\\y&=v|\sin\,u|^p \sin\,u\\z&=\frac{hv}{c^2}(v-2c)\end{align*}$$
where $p > 1$, $h,c > 0$ are adjustable parameters, $0 \leq u \leq 2\pi$, and $v$ ranges over nonnegative values.
Here's an example, with $p=2$, $c=3$, $h=2$, and $0 \leq v \leq 4$: