what is the function of ellipse perimeter depending on the angle of ellipse rotation in space? Let's start with a very simple one-axis (be it major semiaxis plane) rotation using the approximated perimeter equation:
l ≈ π(3/2 (a+b)-√ab).
My aim is to show how the perimeter value changes for an elliptical defect in heart when seen from different angles.
Please note that I am not a mathematician (I am MD), therefore I would greatly appreciate to keep things as simple as possible.
Thanks for your help, Jan
The underlying problem is that when the ellipse is projected to a plane, the projected semiaxes are not the semiaxes of the projected ellipse. For example:
The two ellipses are exactly the same. The blue lines on the left are the axes of the original ellipse. The red lines on the right are the axes of the projected ellipse.
If the projected semiaxes ("half-axes") are $\vec{a}$ and $\vec{b}$, the points $\vec{p}(\varphi)$ on the projected ellipse are $$\vec{p}(\varphi) = \vec{a}\cos\varphi + \vec{b}\sin\varphi$$
If we have a function $L(a, b)$ that yields the (approximate) perimeter of an ellipse with semiaxes $a$ and $b$, we need functions $u(\vec{a}, \vec{b}) \ge 0$ and $v(\vec{a}, \vec{b}) \ge 0$ that yield the actual lengths of the semiaxes of the projected ellipse. Then, the length of the perimeter of the projected ellipse is $L\left(u(\vec{a}, \vec{b}), v(\vec{a}, \vec{b})\right)$.
By finding the extrema of $\vec{p}(\varphi)$, I found the solutions
r1= $u(\vec{a}, \vec{b})$ andr2= $v(\vec{a}, \vec{b})$, using Sagemath:where $\vec{a} = ( \text{ax} , \text{ay} )$, $\vec{b} = ( \text{bx} , \text{by} )$, and
^denotes exponentiation. It can be cleaned up some, but that is drudge work I'll leave to whoever wants to use it.I tested a quick-and-horribly-dirty version of the above in C,
with a number of random semiaxis vectors. Calculating the perimeter lengths numerically, the results obtained by direct evaluation of the projected ellipse and those by calculating the perimeter of an axis-aligned ellipse where the semiaxis lengths were provided by
semiaxes(), were in excellent agreement. In other words, this seems to work.