18
$\begingroup$

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

Chinese roof

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.

  • 0
    You're on your own with making the surface look "tiled", though. That's a trickier proposition... :)2011-11-21

4 Answers 4

14

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$:

fake Chinese roof

  • 0
    An excellent starting point, thanks!2011-11-17
12

I am not sure what you are looking for exactly, but to me this roof really looks like a pyramid to which is added the bottom of a sphere: $z=H - \max(\lvert x\rvert,\lvert y\rvert) + R - \sqrt{R^2-x^2-y^2},$ where $H$ is the height of the center of the roof, and $R$ is the radius of this supposed sphere, which you can definitely tweak.

enter image description here

In the above example, I chose $x\in\{-1,1\}$ and $y\in\{-1,1\}$, so of course $R$ should not be smaller than $\sqrt{2}$, but the limit depends on the ranges you choose for $x$ and $y$.

  • 0
    A very interesting approach!2011-11-17
8

I figured I could improve on the first answer I gave; some more tweaking with the $z$-component led me to the parametric equations

$\begin{align*}x&=v|\cos\,u|^p \cos\,u\\y&=v|\sin\,u|^p \sin\,u\\z&=\frac{hv}{c} \left(\left(\frac{v}{c}+2f-2\right)\cos^2 2u-2f\right)\end{align*}$

where $f > 0$ is an additional adjustable parameter.

Here is the case $p=1$, $c=9/10$, $h=1/2$, $f=2/3$, and $0 \leq v \leq 3/2$:

improved Chinese roof

I derived these new equations by starting with the parametric equations of a cone, replacing the circular cross sections with Lamé curve cross sections, and tweaking the $z$-component such that the sweeping ray linearly interpolates between a line (between corners) and a parabola (on the corners).

1

\begin{align} x &= \frac{u+v}{2}\\ y &= \frac{u-v}{2}\\ z &= -0.3 \sin { ((\frac{|u+v|}{2} + \frac{|u-v|}{2})(\frac{|u+v|}{2} + \frac{|u-v|}{2}+1) \frac{\pi}{2} }) \end{align} \begin{align} -1 < u < 1, -1 < v < 1 \end{align}

Drawn with Gnuplot (I hope you can plot a better one)

From Side:

Side

Edit: Perhaps, this shows better: gnuplot2

  • 0
    Felix's approach is 45 degrees rorated relative to my approach. And I'm still not sure which one is easier to tweak. The shaddow of Felix's approach on x-y plane is exactly an square, without using parametric plot. But I had to use u,v parameters to make it xy-square.2011-11-22