<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://ukikipedia.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Omedas</id>
	<title>Ukikipedia - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://ukikipedia.net/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Omedas"/>
	<link rel="alternate" type="text/html" href="https://ukikipedia.net/wiki/Special:Contributions/Omedas"/>
	<updated>2026-09-26T18:53:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.15</generator>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19863</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19863"/>
		<updated>2025-10-17T02:33:12Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Put section headings back into sentence case&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; (pronounced ee-ver-lipse /ˈivɜlɪps/) is the range of positions Mario can occupy while he is in the air and cannot turn, assuming that drag is constant. The boundary of the Iwerlipse is reached by &#039;&#039;&#039;Arctan Straining&#039;&#039;&#039; - the optimal way of air straining that gives the greatest distance along a chosen angle &#039;&#039;ω&#039;&#039; for a given number of frames &#039;&#039;T&#039;&#039;. For a single frame &#039;&#039;T&#039;&#039; = 1, the Iwerlipse is an ellipse with half-width 10 (in the sideways direction) and half-height 1.5 (in the forwards direction). For general &#039;&#039;T&#039;&#039;, it resembles an ellipse with half-width 10&#039;&#039;T&#039;&#039; and half-height 3&#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/4, but bulges at the corners, covering more area than an ellipse with the same dimensions. As shown by &#039;&#039;Grassdigger&#039;&#039;, the shape is well approximated by a generalised superellipse, and thus &#039;&#039;Pannenkoek2012&#039;&#039; proposed calling this shape the Iwerlipse - a pun on the name of &#039;&#039;Iwer Sonsch&#039;&#039;, who first discoverered that Arctan Straining was optimal in April 2018.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
&lt;br /&gt;
Arctan Straining gives the maximum possible distance along a target angle &#039;&#039;ω&#039;&#039; that differs from the facing angle &#039;&#039;θ&#039;&#039;, over a finite number of frames &#039;&#039;T&#039;&#039;. It is performed by choosing straining angles 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; (intendedYaw) such that&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\phi_t - \theta =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] &amp;amp; \text{if } \cos(\omega-\theta) &amp;gt; 0, \\[14pt]&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] + 180^\circ &amp;amp; \text{if } \cos(\omega-\theta) &amp;lt; 0,&lt;br /&gt;
\end{cases}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &#039;&#039;t&#039;&#039; being the frame number between 1 and &#039;&#039;T&#039;&#039;. (Usually only the top row of this equation is given, but since the arctan function only gives results between ±90°, we must add 180° to the result if the target angle is behind Mario.)&lt;br /&gt;
&lt;br /&gt;
Arctan straining is a result of two asymmetries in how Mario&#039;s forward velocity and sideways speed are updated&lt;br /&gt;
&lt;br /&gt;
* Forward velocity accelerates gradually over time, while sideways speed is reset every frame.&lt;br /&gt;
&lt;br /&gt;
* Straining on a single frame has a weak effect on forward velocity (increasing velocity by a maximum of 1.5), but a strong effect on sideways speed for a single frame (setting sideways speed to a maximum of 10).&lt;br /&gt;
&lt;br /&gt;
In terms of total distance acquired along some direction, forward velocity is thus more effective over long periods of time, where it has time to accelerate to large values, whereas sideways speed is more effective over short periods of time. Optimal straining over many frames then involves straining mostly along the forwards direction to build up a large forward velocity, and then towards the end of the trajectory, transitioning into sideways straining to exploit the large sideways displacement obtainable in a single frame.&lt;br /&gt;
&lt;br /&gt;
==Update equations==&lt;br /&gt;
&lt;br /&gt;
When Mario is in the air and cannot turn, the function &amp;lt;code&amp;gt;update_air_without_turn&amp;lt;/code&amp;gt; is responsible for updating Mario&#039;s velocity variables from one frame, &#039;&#039;t&#039;&#039;-1, to the next, &#039;&#039;t&#039;&#039;. Without loss of generality, we can choose coordinates so that Mario&#039;s facing angle is zero. In other words, he is facing along the z-axis, while his sideways speed is directed along the x-axis. Mario&#039;s forward velocity and position coordinates are then updated via&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
v_t &amp;amp;= v_{t-1} - D(v_{t-1}, \phi_t) + 1.5\cos(\phi_t),\\&lt;br /&gt;
z_t &amp;amp;= z_{t-1} + v_t,\\&lt;br /&gt;
x_t &amp;amp;= x_{t-1} + 10\sin(\phi_t),&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; is the straining angle (intendedYaw) on frame &#039;&#039;t&#039;&#039;. The total effect of drag is determined by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D(v_{t-1}, \phi_t) =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
-2.35 &amp;amp; \text{if } v_{t-1} &amp;lt; - 16.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
-0.35 &amp;amp; \text{if } -16.35 - 1.5 \cos(\phi_t) \leq v_{t-1} \leq -0.35,\\&lt;br /&gt;
v_{t-1} &amp;amp; \text{if } -0.35 &amp;lt; v_{t-1} &amp;lt; 0.35,\\&lt;br /&gt;
0.35 &amp;amp; \text{if } 0.35 \leq v_{t-1} \leq D_\text{cap} + 0.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
1.35 &amp;amp; \text{if } v_{t-1} &amp;gt; D_\text{cap} + 0.35 - 1.5 \cos(\phi_t).&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;D&#039;&#039;&amp;lt;sub&amp;gt;cap&amp;lt;/sub&amp;gt; is a soft velocity cap equal to 48 for long jumps and 32 otherwise. In practice, these drag boundaries are far enough apart that the drag is often constant over large periods of time. In this case we can write Mario&#039;s position after &#039;&#039;T&#039;&#039; frames as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
x_T &amp;amp;= x_0 + 10 \sum_{t=1}^{T} \sin(\phi_t),\\&lt;br /&gt;
z_T &amp;amp;= z_0 + v_0 T - \frac{DT(T+1)}{2} + 1.5 \sum_{t=1}^T (T+1-t)\cos(\phi_t).&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In deriving the expression for &#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; we have used that the sum of the first &#039;&#039;T&#039;&#039; integers is equal to the triangle number &#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/2, and we have grouped together terms of cos(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;). Notice that, since forward straining produces an acceleration that is not reset between frames, earlier frames have a stronger effect on &#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; than later frames. The effective strength is 1.5(&#039;&#039;T&#039;&#039;+1-&#039;&#039;t&#039;&#039;), i.e. 1.5 multiplied by the number of frames remaining (including the current frame), since the forward velocity gained on one frame produces a displacement also on all remaining frames.&lt;br /&gt;
&lt;br /&gt;
==Arctan straining proof==&lt;br /&gt;
&lt;br /&gt;
The displacement vector after &#039;&#039;T&#039;&#039; frames is &#039;&#039;&#039;R&#039;&#039;&#039; = (&#039;&#039;x&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; − &#039;&#039;x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;) &#039;&#039;&#039;x̂&#039;&#039;&#039; + (&#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; − &#039;&#039;z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;) &#039;&#039;&#039;ẑ&#039;&#039;&#039;. Taking the dot product of this with the unit vector along the target angle &#039;&#039;ω&#039;&#039; gives the distance moved along this angle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp;= \left(v_0 T - \frac{DT(T+1)}{2}\right)\cos(\omega)\\&lt;br /&gt;
&amp;amp;+ \sum_{t=1}^T \left[10\sin(\phi_t)\sin(\omega) + 1.5(T+1-t)\cos(\phi_t)\cos(\omega)\right],\\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the first line is a constant displacement due to our initial velocity and drag, and the second line gives the effective contribution from straining on each frame. Thanks to this separation, we can maximize the total distance by individually maximizing each contribution, d&#039;&#039;S&#039;&#039;/d𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; = 0, yielding&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_t - \theta) = \frac{10\tan(\omega - \theta)}{1.5(T+1-t)},&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where we have also rotated the coordinate system back to allow for general facing angles θ. Since tan(&#039;&#039;x&#039;&#039;) = tan(&#039;&#039;x&#039;&#039;±180°), this equation has two unique solutions for 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; which are given above.&lt;br /&gt;
&lt;br /&gt;
== Iwerlipse equations ==&lt;br /&gt;
&lt;br /&gt;
By writing sin(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;) and cos(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;) in terms of tan(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;), and using the optimal straining relation, we obtain exact expressions for the boundary of the Iwerlipse after &#039;&#039;T&#039;&#039; frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm10 \sum_{t=1}^T \frac{1}{\sqrt{1+\beta^2 t^2}},\\ z_T - \langle z \rangle &amp;amp;= \pm1.5 \beta \sum_{t=1}^T \frac{t^2}{\sqrt{1+\beta^2 t^2}}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;β&#039;&#039; = 1.5/10tan(&#039;&#039;ω&#039;&#039;), and ⟨&#039;&#039;z&#039;&#039;⟩ = &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;T&#039;&#039; - &#039;&#039;DT&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/2. We can restrict 0 &amp;lt; &#039;&#039;ω&#039;&#039; &amp;lt; 90°, with the four combinations of plus and minus signs giving the remaining quadrants. The Iwerlipse&#039;s half-width is &#039;&#039;x&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 10&#039;&#039;T&#039;&#039;, while its half-height is &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3&#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/4.&lt;br /&gt;
&lt;br /&gt;
=== Approximations ===&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;T&#039;&#039; is large, the exact expressions involve large summation terms, so it may be useful to have approximate expressions that are easier to compute.&lt;br /&gt;
By replacing the summations from &#039;&#039;t&#039;&#039; = 1 to &#039;&#039;t&#039;&#039; = &#039;&#039;T&#039;&#039; with an integral from &#039;&#039;t&#039;&#039; = 1/2 to &#039;&#039;t&#039;&#039; = &#039;&#039;T&#039;&#039; + 1/2 (essentially performing the midpoint rule of numerical integration in reverse), we obtain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm \frac{10}{\beta} \left[\operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2},\\ z_T - \langle z \rangle &amp;amp;= \pm \frac{3}{4\beta^2} \left[\beta t\sqrt{1+\beta^2 t^2} - \operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the notation [F(t)]&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;b&amp;lt;/sup&amp;gt; = F(b) − F(a). This approximation converges to the true result very quickly - even for &#039;&#039;T&#039;&#039; = 2, the RMS error (normalized by &#039;&#039;x&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; and &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;) is 4.3×10&amp;lt;sup&amp;gt;−3&amp;lt;/sup&amp;gt;, while for &#039;&#039;T &amp;gt; 6&#039;&#039; it is less than 10&amp;lt;sup&amp;gt;−3&amp;lt;/sup&amp;gt;. Similar expressions obtained using the Euler–Maclaurin formula converge more slowly, even with first-order correction terms.&lt;br /&gt;
&lt;br /&gt;
A simpler but less accurate approximation is obtained by fitting the Iwerlipse to a generalized superellipse&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \left(\frac{x_T - x_0}{x_\mathrm{max}}\right)^{m(T)} + \left(\frac{z_T - \langle z \rangle}{x_\mathrm{max}}\right)^{n(T)} = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
with exponents &#039;&#039;m(T)&#039;&#039; and &#039;&#039;n(T)&#039;&#039; found by minimizing the error. These have been computed up to large &#039;&#039;T&#039;&#039;, and can be obtained from a lookup table&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1xDmgHz878qiAS1ZF1Y5M0M1eiZUdZRSl/view?usp=sharing Showing Iwer&#039;s proof and deriving the Iwerlipse expressions.]&amp;lt;/ref&amp;gt;. In the limit &#039;&#039;T&#039;&#039; ≫ 1, the exponents converge to &#039;&#039;m&#039;&#039; ≈ 2.520897 and &#039;&#039;n&#039;&#039; ≈ 2.064371, but unlike the integral approximation, the expression never converges to the exact result — there is always some small error.&lt;br /&gt;
&lt;br /&gt;
== Quarterstep penalty ==&lt;br /&gt;
&lt;br /&gt;
If a number of quartersteps, &#039;&#039;q&#039;&#039; ∈ {0,1,2,3}, are lost on the final frame, the forward velocity gained on frame &#039;&#039;t&#039;&#039; no longer accumulates forward distance over &#039;&#039;T&#039;&#039;+1-&#039;&#039;t&#039;&#039; frames, but instead over &#039;&#039;T&#039;&#039; - &#039;&#039;q&#039;&#039;/4 + 1 - &#039;&#039;t&#039;&#039; frames. The optimal straining relation then becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_{t&#039;}) = \begin{cases} \dfrac{10\tan(\omega)}{1.5(T - q/4 + 1 - t)}, &amp;amp; \text{if } t &amp;lt; T,\\[10pt] \dfrac{10\tan(\omega)}{1.5}, &amp;amp; \text{if } t = T. \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimal straining angle for the final frame is not affected, since in this case the ellipse shrinks in both directions rather than just vertically, i.e. a factor (1-&#039;&#039;q&#039;&#039;/4) cancels in the numerator and denominator.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;2 July 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Plush discovers that during a dive recover, one can gain greater distance along an angle different from Mario&#039;s facing angle by “flinging” the control stick through different angles during the trajectory, rather than holding it at a constant angle.&lt;br /&gt;
&lt;br /&gt;
Pannenkoek qualitatively explains this phenomenon that would later be known as &#039;&#039;arctan straining&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
I think you&#039;re supposed to hold forward-ish for most of it, then sideways at the end. Because sideways movement doesn&#039;t depend on your speed. So 5 frames of sideways holding at the start of the DR is equivalent to the 5 frames at the end. But forward distance depends on your hspeed. So let&#039;s say you start with some hspeed. If you go sideways then forwards, then you&#039;ll lose that hspeed. But if you go forward then sideways, then you&#039;ll take advantage of your starting hspeed. The best inputs would probably mix sideways and forwards somewhat.  &lt;br /&gt;
&amp;lt;br /&amp;gt; — &amp;lt;b&amp;gt;Pannenkoek2012&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Peter Fedak shares the correct velocity update equations, and the three of them begin to consider what the mathematically optimal inputs are.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 September 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer Sonsch independently rediscovers the velocity update equations and realises that by facing along the hypotenuse of the forward velocity and sideways speed — a trick known in other speedrunning communities as &#039;&#039;vectoring&#039;&#039; — he can gain greater distance in a single frame.  &lt;br /&gt;
He wonders how this would look over multiple frames, restarting the discussion of optimal straining.  &lt;br /&gt;
However, there is no quantitative progress until it becomes relevant to the A Button Challenge the following year.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;18 March 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
The “Blast to the Stone Pillar” star in JRB is collected in 0 A presses for the first time, after Tyler Kehne figures out how to use conserved speed to get from the nearby pillar to the star platform.&lt;br /&gt;
&lt;br /&gt;
The community turns their attention to whether the “Treasure of the Ocean Cave” star can be collected in a similar way, again reviving the optimal straining question, as people including Iwer, bad_boot, and DeRockProject begin attempting to make the most of the limited speed they have available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;16 April 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer states the optimal straining equation for the first time in the following form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_{t&#039;} - \theta = \operatorname{arccot}(0.15\,r\,t&#039;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to our expression above, since arccot(&#039;&#039;x&#039;&#039;) = arctan(1/&#039;&#039;x&#039;&#039;),  &lt;br /&gt;
with, &#039;&#039;r&#039;&#039; = 1/tan(&#039;&#039;ω&#039;&#039;), and, &#039;&#039;t&#039;&#039;&#039; = &#039;&#039;T&#039;&#039; + 1 - &#039;&#039;t&#039;&#039;.  &lt;br /&gt;
(If using this expression, we need to add 180° if the target angle is to the right of Mario, since arccot only gives results between 0° and 180°.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;23 June 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Pannenkoek posts an idea for collecting the “Scale the Mountain” star in TTM via a dive recover.  &lt;br /&gt;
To find out whether it was possible, Iwer, Grassdigger, Jane, bad_boot, and DeRockProject work to plot all of Mario’s possible positions while air straining.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;20 August 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer discovers the exact equations describing Mario&#039;s possible positions after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames. Grassdigger and DeRockProject then show that the total shape can be well approximated by a generalised superellipse.  &lt;br /&gt;
Pannenkoek proposes calling it the &#039;&#039;Iwerlipse&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 October 2019&amp;lt;/div&amp;gt;&lt;br /&gt;
Silverstrawb provides an alternative proof&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1df97glqVn-cXEUmP15vNxgQtwa8jJK2w/view?usp=sharing Showing Silverstrawb&#039;s proof.]&amp;lt;/ref&amp;gt; of the optimal straining relation by converting the discrete update equations into the continuous differential equations&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\dot{x} &amp;amp;= 10 \sin(\phi(t)),\\&lt;br /&gt;
\ddot{z} &amp;amp;= 1.5 \cos(\phi(t)) - D,&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using the calculus of variations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;29 July 2020&amp;lt;/div&amp;gt;&lt;br /&gt;
Krithalith independently rediscovers Iwer’s original proof and extends it to include quartersteps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;27 November 2021&amp;lt;/div&amp;gt;&lt;br /&gt;
sm64expert adds arctan straining to MKDasher’s input direction LUA program, making it accessible to everyone for the first time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;16 March 2024&amp;lt;/div&amp;gt;&lt;br /&gt;
sm64expert adds arctan straining to [https://github.com/mupen64/SM64LuaRedux SM64 Lua Redux].&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{#ev:youtube|_yx0eutBwII}}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19862</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19862"/>
		<updated>2025-10-17T02:15:16Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Significantly reduce usage of &amp;lt;math&amp;gt; tags to reduce chance of &amp;quot;Math extension cannot connect to Restbase&amp;quot; error&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; (pronounced ee-ver-lipse /ˈivɜlɪps/) is the range of positions Mario can occupy while he is in the air and cannot turn, assuming that drag is constant. The boundary of the Iwerlipse is reached by &#039;&#039;&#039;Arctan Straining&#039;&#039;&#039; - the optimal way of air straining that gives the greatest distance along a chosen angle &#039;&#039;ω&#039;&#039; for a given number of frames &#039;&#039;T&#039;&#039;. For a single frame &#039;&#039;T&#039;&#039; = 1, the Iwerlipse is an ellipse with half-width 10 (in the sideways direction) and half-height 1.5 (in the forwards direction). For general &#039;&#039;T&#039;&#039;, it resembles an ellipse with half-width 10&#039;&#039;T&#039;&#039; and half-height 3&#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/4, but bulges at the corners, covering more area than an ellipse with the same dimensions. As shown by &#039;&#039;Grassdigger&#039;&#039;, the shape is well approximated by a generalised superellipse, and thus &#039;&#039;Pannenkoek2012&#039;&#039; proposed calling this shape the Iwerlipse - a pun on the name of &#039;&#039;Iwer Sonsch&#039;&#039;, who first discoverered that Arctan Straining was optimal in April 2018.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
&lt;br /&gt;
Arctan Straining gives the maximum possible distance along a target angle &#039;&#039;ω&#039;&#039; that differs from the facing angle &#039;&#039;θ&#039;&#039;, over a finite number of frames &#039;&#039;T&#039;&#039;. It is performed by choosing straining angles 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; (intendedYaw) such that&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\phi_t - \theta =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] &amp;amp; \text{if } \cos(\omega-\theta) &amp;gt; 0, \\[14pt]&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] + 180^\circ &amp;amp; \text{if } \cos(\omega-\theta) &amp;lt; 0,&lt;br /&gt;
\end{cases}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &#039;&#039;t&#039;&#039; being the frame number between 1 and &#039;&#039;T&#039;&#039;. (Usually only the top row of this equation is given, but since the arctan function only gives results between ±90°, we must add 180° to the result if the target angle is behind Mario.)&lt;br /&gt;
&lt;br /&gt;
Arctan straining is a result of two asymmetries in how Mario&#039;s forward velocity and sideways speed are updated&lt;br /&gt;
&lt;br /&gt;
* Forward velocity accelerates gradually over time, while sideways speed is reset every frame.&lt;br /&gt;
&lt;br /&gt;
* Straining on a single frame has a weak effect on forward velocity (increasing velocity by a maximum of 1.5), but a strong effect on sideways speed for a single frame (setting sideways speed to a maximum of 10).&lt;br /&gt;
&lt;br /&gt;
In terms of total distance acquired along some direction, forward velocity is thus more effective over long periods of time, where it has time to accelerate to large values, whereas sideways speed is more effective over short periods of time. Optimal straining over many frames then involves straining mostly along the forwards direction to build up a large forward velocity, and then towards the end of the trajectory, transitioning into sideways straining to exploit the large sideways displacement obtainable in a single frame.&lt;br /&gt;
&lt;br /&gt;
==Update Equations==&lt;br /&gt;
&lt;br /&gt;
When Mario is in the air and cannot turn, the function &amp;lt;code&amp;gt;update_air_without_turn&amp;lt;/code&amp;gt; is responsible for updating Mario&#039;s velocity variables from one frame, &#039;&#039;t&#039;&#039;-1, to the next, &#039;&#039;t&#039;&#039;. Without loss of generality, we can choose coordinates so that Mario&#039;s facing angle is zero. In other words, he is facing along the z-axis, while his sideways speed is directed along the x-axis. Mario&#039;s forward velocity and position coordinates are then updated via&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
v_t &amp;amp;= v_{t-1} - D(v_{t-1}, \phi_t) + 1.5\cos(\phi_t),\\&lt;br /&gt;
z_t &amp;amp;= z_{t-1} + v_t,\\&lt;br /&gt;
x_t &amp;amp;= x_{t-1} + 10\sin(\phi_t),&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; is the straining angle (intendedYaw) on frame &#039;&#039;t&#039;&#039;. The total effect of drag is determined by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D(v_{t-1}, \phi_t) =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
-2.35 &amp;amp; \text{if } v_{t-1} &amp;lt; - 16.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
-0.35 &amp;amp; \text{if } -16.35 - 1.5 \cos(\phi_t) \leq v_{t-1} \leq -0.35,\\&lt;br /&gt;
v_{t-1} &amp;amp; \text{if } -0.35 &amp;lt; v_{t-1} &amp;lt; 0.35,\\&lt;br /&gt;
0.35 &amp;amp; \text{if } 0.35 \leq v_{t-1} \leq D_\text{cap} + 0.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
1.35 &amp;amp; \text{if } v_{t-1} &amp;gt; D_\text{cap} + 0.35 - 1.5 \cos(\phi_t).&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;D&#039;&#039;&amp;lt;sub&amp;gt;cap&amp;lt;/sub&amp;gt; is a soft velocity cap equal to 48 for long jumps and 32 otherwise. In practice, these drag boundaries are far enough apart that the drag is often constant over large periods of time. In this case we can write Mario&#039;s position after &#039;&#039;T&#039;&#039; frames as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
x_T &amp;amp;= x_0 + 10 \sum_{t=1}^{T} \sin(\phi_t),\\&lt;br /&gt;
z_T &amp;amp;= z_0 + v_0 T - \frac{DT(T+1)}{2} + 1.5 \sum_{t=1}^T (T+1-t)\cos(\phi_t).&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In deriving the expression for &#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; we have used that the sum of the first &#039;&#039;T&#039;&#039; integers is equal to the triangle number &#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/2, and we have grouped together terms of cos(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;). Notice that, since forward straining produces an acceleration that is not reset between frames, earlier frames have a stronger effect on &#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; than later frames. The effective strength is 1.5(&#039;&#039;T&#039;&#039;+1-&#039;&#039;t&#039;&#039;), i.e. 1.5 multiplied by the number of frames remaining (including the current frame), since the forward velocity gained on one frame produces a displacement also on all remaining frames.&lt;br /&gt;
&lt;br /&gt;
==Arctan Straining Proof==&lt;br /&gt;
&lt;br /&gt;
The displacement vector after &#039;&#039;T&#039;&#039; frames is &#039;&#039;&#039;R&#039;&#039;&#039; = (&#039;&#039;x&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; − &#039;&#039;x&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;) &#039;&#039;&#039;x̂&#039;&#039;&#039; + (&#039;&#039;z&amp;lt;sub&amp;gt;T&amp;lt;/sub&amp;gt;&#039;&#039; − &#039;&#039;z&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;) &#039;&#039;&#039;ẑ&#039;&#039;&#039;. Taking the dot product of this with the unit vector along the target angle &#039;&#039;ω&#039;&#039; gives the distance moved along this angle&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
S &amp;amp;= \left(v_0 T - \frac{DT(T+1)}{2}\right)\cos(\omega)\\&lt;br /&gt;
&amp;amp;+ \sum_{t=1}^T \left[10\sin(\phi_t)\sin(\omega) + 1.5(T+1-t)\cos(\phi_t)\cos(\omega)\right],\\&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the first line is a constant displacement due to our initial velocity and drag, and the second line gives the effective contribution from straining on each frame. Thanks to this separation, we can maximize the total distance by individually maximizing each contribution, d&#039;&#039;S&#039;&#039;/d𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; = 0, yielding&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_t - \theta) = \frac{10\tan(\omega - \theta)}{1.5(T+1-t)},&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where we have also rotated the coordinate system back to allow for general facing angles θ. Since tan(&#039;&#039;x&#039;&#039;) = tan(&#039;&#039;x&#039;&#039;±180°), this equation has two unique solutions for 𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt; which are given above.&lt;br /&gt;
&lt;br /&gt;
== Iwerlipse Equations ==&lt;br /&gt;
&lt;br /&gt;
By writing sin(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;) and cos(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;) in terms of tan(𝜙&amp;lt;sub&amp;gt;t&amp;lt;/sub&amp;gt;), and using the optimal straining relation, we obtain exact expressions for the boundary of the Iwerlipse after &#039;&#039;T&#039;&#039; frames&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm10 \sum_{t=1}^T \frac{1}{\sqrt{1+\beta^2 t^2}},\\ z_T - \langle z \rangle &amp;amp;= \pm1.5 \beta \sum_{t=1}^T \frac{t^2}{\sqrt{1+\beta^2 t^2}}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &#039;&#039;β&#039;&#039; = 1.5/10tan(&#039;&#039;ω&#039;&#039;), and ⟨&#039;&#039;z&#039;&#039;⟩ = &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; + &#039;&#039;v&#039;&#039;&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt;&#039;&#039;T&#039;&#039; - &#039;&#039;DT&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/2. We can restrict 0 &amp;lt; &#039;&#039;ω&#039;&#039; &amp;lt; 90°, with the four combinations of plus and minus signs giving the remaining quadrants. The Iwerlipse&#039;s half-width is &#039;&#039;x&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 10&#039;&#039;T&#039;&#039;, while its half-height is &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; = 3&#039;&#039;T&#039;&#039;(&#039;&#039;T&#039;&#039;+1)/4.&lt;br /&gt;
&lt;br /&gt;
=== Approximations ===&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;T&#039;&#039; is large, the exact expressions involve large summation terms, so it may be useful to have approximate expressions that are easier to compute.&lt;br /&gt;
By replacing the summations from &#039;&#039;t&#039;&#039; = 1 to &#039;&#039;t&#039;&#039; = &#039;&#039;T&#039;&#039; with an integral from &#039;&#039;t&#039;&#039; = 1/2 to &#039;&#039;t&#039;&#039; = &#039;&#039;T&#039;&#039; + 1/2 (essentially performing the midpoint rule of numerical integration in reverse), we obtain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm \frac{10}{\beta} \left[\operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2},\\ z_T - \langle z \rangle &amp;amp;= \pm \frac{3}{4\beta^2} \left[\beta t\sqrt{1+\beta^2 t^2} - \operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the notation [F(t)]&amp;lt;sub&amp;gt;a&amp;lt;/sub&amp;gt;&amp;lt;sup&amp;gt;b&amp;lt;/sup&amp;gt; = F(b) − F(a). This approximation converges to the true result very quickly - even for &#039;&#039;T&#039;&#039; = 2, the RMS error (normalized by &#039;&#039;x&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt; and &#039;&#039;z&#039;&#039;&amp;lt;sub&amp;gt;max&amp;lt;/sub&amp;gt;) is 4.3×10&amp;lt;sup&amp;gt;−3&amp;lt;/sup&amp;gt;, while for &#039;&#039;T &amp;gt; 6&#039;&#039; it is less than 10&amp;lt;sup&amp;gt;−3&amp;lt;/sup&amp;gt;. Similar expressions obtained using the Euler–Maclaurin formula converge more slowly, even with first-order correction terms.&lt;br /&gt;
&lt;br /&gt;
A simpler but less accurate approximation is obtained by fitting the Iwerlipse to a generalized superellipse&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \left(\frac{x_T - x_0}{x_\mathrm{max}}\right)^{m(T)} + \left(\frac{z_T - \langle z \rangle}{x_\mathrm{max}}\right)^{n(T)} = 1, &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
with exponents &#039;&#039;m(T)&#039;&#039; and &#039;&#039;n(T)&#039;&#039; found by minimizing the error. These have been computed up to large &#039;&#039;T&#039;&#039;, and can be obtained from a lookup table&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1xDmgHz878qiAS1ZF1Y5M0M1eiZUdZRSl/view?usp=sharing Showing Iwer&#039;s proof and deriving the Iwerlipse expressions.]&amp;lt;/ref&amp;gt;. In the limit &#039;&#039;T&#039;&#039; ≫ 1, the exponents converge to &#039;&#039;m&#039;&#039; ≈ 2.520897 and &#039;&#039;n&#039;&#039; ≈ 2.064371, but unlike the integral approximation, the expression never converges to the exact result — there is always some small error.&lt;br /&gt;
&lt;br /&gt;
== Quarterstep Penalty ==&lt;br /&gt;
&lt;br /&gt;
If a number of quartersteps, &#039;&#039;q&#039;&#039; ∈ {0,1,2,3}, are lost on the final frame, the forward velocity gained on frame &#039;&#039;t&#039;&#039; no longer accumulates forward distance over &#039;&#039;T&#039;&#039;+1-&#039;&#039;t&#039;&#039; frames, but instead over &#039;&#039;T&#039;&#039; - &#039;&#039;q&#039;&#039;/4 + 1 - &#039;&#039;t&#039;&#039; frames. The optimal straining relation then becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_{t&#039;}) = \begin{cases} \dfrac{10\tan(\omega)}{1.5(T - q/4 + 1 - t)}, &amp;amp; \text{if } t &amp;lt; T,\\[10pt] \dfrac{10\tan(\omega)}{1.5}, &amp;amp; \text{if } t = T. \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimal straining angle for the final frame is not affected, since in this case the ellipse shrinks in both directions rather than just vertically, i.e. a factor (1-&#039;&#039;q&#039;&#039;/4) cancels in the numerator and denominator.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;2 July 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Plush discovers that during a dive recover, one can gain greater distance along an angle different from Mario&#039;s facing angle by “flinging” the control stick through different angles during the trajectory, rather than holding it at a constant angle.&lt;br /&gt;
&lt;br /&gt;
Pannenkoek qualitatively explains this phenomenon that would later be known as &#039;&#039;arctan straining&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
I think you&#039;re supposed to hold forward-ish for most of it, then sideways at the end. Because sideways movement doesn&#039;t depend on your speed. So 5 frames of sideways holding at the start of the DR is equivalent to the 5 frames at the end. But forward distance depends on your hspeed. So let&#039;s say you start with some hspeed. If you go sideways then forwards, then you&#039;ll lose that hspeed. But if you go forward then sideways, then you&#039;ll take advantage of your starting hspeed. The best inputs would probably mix sideways and forwards somewhat.  &lt;br /&gt;
&amp;lt;br /&amp;gt; — &amp;lt;b&amp;gt;Pannenkoek2012&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Peter Fedak shares the correct velocity update equations, and the three of them begin to consider what the mathematically optimal inputs are.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 September 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer Sonsch independently rediscovers the velocity update equations and realises that by facing along the hypotenuse of the forward velocity and sideways speed — a trick known in other speedrunning communities as &#039;&#039;vectoring&#039;&#039; — he can gain greater distance in a single frame.  &lt;br /&gt;
He wonders how this would look over multiple frames, restarting the discussion of optimal straining.  &lt;br /&gt;
However, there is no quantitative progress until it becomes relevant to the A Button Challenge the following year.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;18 March 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
The “Blast to the Stone Pillar” star in JRB is collected in 0 A presses for the first time, after Tyler Kehne figures out how to use conserved speed to get from the nearby pillar to the star platform.&lt;br /&gt;
&lt;br /&gt;
The community turns their attention to whether the “Treasure of the Ocean Cave” star can be collected in a similar way, again reviving the optimal straining question, as people including Iwer, bad_boot, and DeRockProject begin attempting to make the most of the limited speed they have available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;16 April 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer states the optimal straining equation for the first time in the following form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_{t&#039;} - \theta = \operatorname{arccot}(0.15\,r\,t&#039;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to our expression above, since arccot(&#039;&#039;x&#039;&#039;) = arctan(1/&#039;&#039;x&#039;&#039;),  &lt;br /&gt;
with, &#039;&#039;r&#039;&#039; = 1/tan(&#039;&#039;ω&#039;&#039;), and, &#039;&#039;t&#039;&#039;&#039; = &#039;&#039;T&#039;&#039; + 1 - &#039;&#039;t&#039;&#039;.  &lt;br /&gt;
(If using this expression, we need to add 180° if the target angle is to the right of Mario, since arccot only gives results between 0° and 180°.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;23 June 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Pannenkoek posts an idea for collecting the “Scale the Mountain” star in TTM via a dive recover.  &lt;br /&gt;
To find out whether it was possible, Iwer, Grassdigger, Jane, bad_boot, and DeRockProject work to plot all of Mario’s possible positions while air straining.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;20 August 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer discovers the exact equations describing Mario&#039;s possible positions after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames. Grassdigger and DeRockProject then show that the total shape can be well approximated by a generalised superellipse.  &lt;br /&gt;
Pannenkoek proposes calling it the &#039;&#039;Iwerlipse&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 October 2019&amp;lt;/div&amp;gt;&lt;br /&gt;
Silverstrawb provides an alternative proof&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1df97glqVn-cXEUmP15vNxgQtwa8jJK2w/view?usp=sharing Showing Silverstrawb&#039;s proof.]&amp;lt;/ref&amp;gt; of the optimal straining relation by converting the discrete update equations into the continuous differential equations&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\dot{x} &amp;amp;= 10 \sin(\phi(t)),\\&lt;br /&gt;
\ddot{z} &amp;amp;= 1.5 \cos(\phi(t)) - D,&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using the calculus of variations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;29 July 2020&amp;lt;/div&amp;gt;&lt;br /&gt;
Krithalith independently rediscovers Iwer’s original proof and extends it to include quartersteps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;27 November 2021&amp;lt;/div&amp;gt;&lt;br /&gt;
sm64expert adds arctan straining to MKDasher’s input direction LUA program, making it accessible to everyone for the first time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;16 March 2024&amp;lt;/div&amp;gt;&lt;br /&gt;
sm64expert adds arctan straining to [https://github.com/mupen64/SM64LuaRedux SM64 Lua Redux].&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{#ev:youtube|_yx0eutBwII}}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Arctan_Straining&amp;diff=19856</id>
		<title>Arctan Straining</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Arctan_Straining&amp;diff=19856"/>
		<updated>2025-10-16T15:19:41Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Create arctan straining page that redirects to the Iwerlipse page (hopefully)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Iwerlipse]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19855</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19855"/>
		<updated>2025-10-16T15:02:13Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Explain basic mechanism of Arctan Straining and how it constructs the Iwerlipse. Show Iwer&amp;#039;s original proof, and equations for the Iwerlipse. Explain the proper history behind the discoveries.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; is the range of positions Mario can occupy while he is in the air and cannot turn, assuming that drag is constant. The boundary of the Iwerlipse is reached by &#039;&#039;&#039;Arctan Straining&#039;&#039;&#039; - the optimal way of air straining that gives the greatest distance along a chosen angle &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt; for a given number of frames &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. For a single frame &amp;lt;math&amp;gt;T=1&amp;lt;/math&amp;gt;, the Iwerlipse is an ellipse with half-width 10 (in the sideways direction) and half-height 1.5 (in the forwards direction). For general &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;, it resembles an ellipse with half-width &amp;lt;math&amp;gt;10T&amp;lt;/math&amp;gt; and half-height &amp;lt;math&amp;gt;3T(T+1)/4&amp;lt;/math&amp;gt;, but bulges at the corners, covering more area than an ellipse with the same dimensions. As shown by &#039;&#039;Grassdigger&#039;&#039;, the shape is well approximated by a generalised superellipse, and thus &#039;&#039;Pannenkoek2012&#039;&#039; proposed calling this shape the Iwerlipse (pronounced eeverlipse /ˈivɜlɪps/) - a pun on the name of &#039;&#039;Iwer Sonsch&#039;&#039;, who first discoverered that Arctan Straining was optimal in April 2018.&lt;br /&gt;
&lt;br /&gt;
==Basics==&lt;br /&gt;
&lt;br /&gt;
Arctan Straining gives the maximum possible distance along a target angle &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt; that differs from the facing angle &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;, over a finite number of frames &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. It is performed by choosing straining angles &amp;lt;math&amp;gt;\phi_t&amp;lt;/math&amp;gt; (intendedYaw) such that&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
\phi_t - \theta =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] &amp;amp; \text{if } \cos(\omega-\theta) &amp;gt; 0, \\[14pt]&lt;br /&gt;
    \arctan \left[\dfrac{10\tan(\omega - \theta)}{1.5(T+1-t)} \right] + 180^\circ &amp;amp; \text{if } \cos(\omega-\theta) &amp;lt; 0,&lt;br /&gt;
\end{cases}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; being the frame number between &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt;. (Usually only the top row of this equation is given, but since the &amp;lt;math&amp;gt;\arctan&amp;lt;/math&amp;gt; function only gives results between &amp;lt;math&amp;gt;\pm 90^\circ&amp;lt;/math&amp;gt;, we must add &amp;lt;math&amp;gt;180^\circ&amp;lt;/math&amp;gt; to the result if the target angle is behind Mario.)&lt;br /&gt;
&lt;br /&gt;
Arctan straining is a result of two asymmetries in how Mario&#039;s forward velocity and sideways speed are updated&lt;br /&gt;
&lt;br /&gt;
* Forward velocity accelerates gradually over time, while sideways speed is reset every frame&lt;br /&gt;
&lt;br /&gt;
* Straining on a single frame has a weak effect on forward velocity (increasing velocity by a maximum of 1.5), but a strong effect on sideways speed for a single frame (setting sideways speed to a maximum of 10).&lt;br /&gt;
&lt;br /&gt;
In terms of total distance acquired along some direction, forward velocity is thus more effective over long periods of time, where it has time to accelerate to large values, whereas sideways speed is more effective over short periods of time. Optimal straining over many frames then involves straining mostly along the forwards direction to build up a large forward velocity, and then towards the end of the trajectory, transitioning into sideways straining to exploit the large sideways displacement obtainable in a single frame.&lt;br /&gt;
&lt;br /&gt;
==Update Equations==&lt;br /&gt;
&lt;br /&gt;
When Mario is in the air and cannot turn, the function &amp;lt;code&amp;gt;update_air_without_turn&amp;lt;/code&amp;gt; is responsible for updating Mario&#039;s velocity variables from one frame, &amp;lt;math&amp;gt;t-1&amp;lt;/math&amp;gt;, to the next, &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. Without loss of generality, we can choose coordinates so that Mario&#039;s facing angle is zero. In other words, he is facing along the &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt;-axis, while his sideways speed is directed along the &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;-axis. Mario&#039;s forward velocity, &amp;lt;math&amp;gt;v_t&amp;lt;/math&amp;gt;, and position coordinates &amp;lt;math&amp;gt;z_t&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;x_t&amp;lt;/math&amp;gt; are then updated via&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
v_t &amp;amp;= v_{t-1} - D(v_{t-1}, \phi_t) + 1.5\cos(\phi_t),\\&lt;br /&gt;
z_t &amp;amp;= z_{t-1} + v_t,\\ x_t &amp;amp;= x_{t-1} + 10\sin(\phi_t),&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;\phi_t&amp;lt;/math&amp;gt; is the straining angle (intendedYaw) on frame &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;. The total effect of drag is given by the coefficient &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, determined by&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
D(v_{t-1}, \phi_t) =&lt;br /&gt;
\begin{cases}&lt;br /&gt;
-2.35 &amp;amp; \text{if } v_{t-1} &amp;lt; - 16.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
-0.35 &amp;amp; \text{if } -16.35 - 1.5 \cos(\phi_t) \leq v_{t-1} \leq -0.35,\\&lt;br /&gt;
v_{t-1} &amp;amp; \text{if } -0.35 &amp;lt; v_{t-1} &amp;lt; 0.35,\\&lt;br /&gt;
0.35 &amp;amp; \text{if } 0.35 \leq v_{t-1} \leq D_\text{cap} + 0.35 - 1.5 \cos(\phi_t),\\&lt;br /&gt;
1.35 &amp;amp; \text{if } v_{t-1} &amp;gt; D_\text{cap} + 0.35 - 1.5 \cos(\phi_t).&lt;br /&gt;
\end{cases}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;D_\text{cap}&amp;lt;/math&amp;gt; is a soft velocity cap equal to 48 for long jumps and 32 otherwise.&lt;br /&gt;
&lt;br /&gt;
In practice, these drag boundaries are far enough apart that the drag is often constant over large periods of time. In this case we can write Mario&#039;s position after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames as&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
x_T &amp;amp;= x_0 + 10 \sum_{t=1}^{T} \sin(\phi_t),\\&lt;br /&gt;
z_T &amp;amp;= z_0 + v_0 T - D \sum_{t=1}^T t + 1.5 \sum_{t=1}^T \sum_{n=1}^t \cos(\phi_n).&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;math&amp;gt;\sum_{t=1}^T t = T(T+1)/2&amp;lt;/math&amp;gt;, and by grouping terms of &amp;lt;math&amp;gt;\cos(\phi_t)&amp;lt;/math&amp;gt;, the latter can be simplified to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; z_T = z_0 + v_0 T - \frac{DT(T+1)}{2} + 1.5 \sum_{t=1}^T (T+1-t)\cos(\phi_t). &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that, since forward straining produces an acceleration that is not reset between frames, earlier frames have a stronger effect on the final &amp;lt;math&amp;gt;z&amp;lt;/math&amp;gt; position than later frames. The effective strength is &amp;lt;math&amp;gt;1.5(T+1-t)&amp;lt;/math&amp;gt;, i.e. 1.5 multiplied by the number of frames remaining (including the current frame), since the forward velocity gained on one frame produces a displacement also on all remaining frames.&lt;br /&gt;
&lt;br /&gt;
==Arctan Straining Proof==&lt;br /&gt;
&lt;br /&gt;
The displacement vector after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{R} = (x_T - x_0)\mathbf{\hat{x}} + (z_T - z_0)\mathbf{\hat{z}}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
while the unit vector along the angle &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt; is&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\mathbf{\hat{n}} = \sin(\omega)\mathbf{\hat{x}} + \cos(\omega)\mathbf{\hat{z}}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The distance we move along a target angle &amp;lt;math&amp;gt;\omega&amp;lt;/math&amp;gt; over &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames is then&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; S = \mathbf{R} \cdot \mathbf{\hat{n}} = \langle S\rangle + \sum_{t=1}^T S_t, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \langle S \rangle = \left(v_0 T - \frac{DT(T+1)}{2}\right)\cos(\omega), &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is due to our initial velocity and drag, while&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; S_t = 10\sin(\phi_t)\sin(\omega) + 1.5(T+1-t)\cos(\phi_t)\cos(\omega), &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
is the effective contribution from straining on frame &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;.&lt;br /&gt;
Thanks to this separation, we can maximize the total distance &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt; by individually maximizing each contribution &amp;lt;math&amp;gt;S_t&amp;lt;/math&amp;gt; as a function of &amp;lt;math&amp;gt;\phi_t&amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \frac{d S_t}{d \phi_t} = 10\cos(\phi_t)\sin(\omega) - 1.5(T+1-t)\sin(\phi_t)\cos(\omega) = 0, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and finally we find&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_t) = \frac{10\tan(\omega)}{1.5(T+1-t)}, &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or, rotating the coordinate system back to allow for general facing angles &amp;lt;math&amp;gt;\theta&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_t - \theta) = \frac{10\tan(\omega - \theta)}{1.5(T+1-t)}. &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since &amp;lt;math&amp;gt;\tan(x) = \tan(x\pm180^\circ)&amp;lt;/math&amp;gt;, this equation has two solutions for &amp;lt;math&amp;gt;\phi_t&amp;lt;/math&amp;gt; which are given above.&lt;br /&gt;
&lt;br /&gt;
== Iwerlipse Equations ==&lt;br /&gt;
&lt;br /&gt;
By writing &amp;lt;math&amp;gt;\sin(\phi_t)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;\cos(\phi_t)&amp;lt;/math&amp;gt; in terms of &amp;lt;math&amp;gt;\tan(\phi_t)&amp;lt;/math&amp;gt;, and using the optimal straining relation, we obtain exact expressions for the boundary of the Iwerlipse after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm10 \sum_{t=1}^T \frac{1}{\sqrt{1+\beta^2 t^2}},\\ z_T - \langle z \rangle &amp;amp;= \pm1.5 \beta \sum_{t=1}^T \frac{t^2}{\sqrt{1+\beta^2 t^2}}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\beta = \frac{1.5}{10}\tan(\omega),&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\langle z \rangle = z_0 + v_0 T - \frac{DT(T+1)}{2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
We can restrict &amp;lt;math&amp;gt;0 &amp;lt; \omega &amp;lt; 90^\circ&amp;lt;/math&amp;gt;, with the four combinations of plus and minus signs giving the remaining quadrants.&lt;br /&gt;
The Iwerlipse&#039;s half-width is &amp;lt;math&amp;gt;x_\mathrm{max} = 10T&amp;lt;/math&amp;gt;, while its half-height is &amp;lt;math&amp;gt;z_\mathrm{max} = 3T(T+1)/4&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Approximations ===&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; is large, the exact expressions involve large summation terms, so it may be useful to have approximate expressions that are easier to compute.&lt;br /&gt;
By replacing the summations from &amp;lt;math&amp;gt;t=1&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;t=T&amp;lt;/math&amp;gt; with an integral from &amp;lt;math&amp;gt;t=1/2&amp;lt;/math&amp;gt; to &amp;lt;math&amp;gt;t=T+1/2&amp;lt;/math&amp;gt; (essentially performing the midpoint rule of numerical integration in reverse), we obtain&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \begin{aligned} x_T - x_0 &amp;amp;= \pm \frac{10}{\beta} \left[\operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2},\\ z_T - \langle z \rangle &amp;amp;= \pm \frac{3}{4\beta^2} \left[\beta t\sqrt{1+\beta^2 t^2} - \operatorname{arsinh}(\beta t)\right]^{T+1/2}_{1/2}, \end{aligned} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
with the notation &amp;lt;math&amp;gt;[F(t)]_{t_1}^{t_2} = F(t_2) - F(t_1)&amp;lt;/math&amp;gt;.&lt;br /&gt;
This approximation converges to the true result very quickly:&lt;br /&gt;
even for &amp;lt;math&amp;gt;T=2&amp;lt;/math&amp;gt;, the RMS error (normalized by &amp;lt;math&amp;gt;x_\mathrm{max}&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;z_\mathrm{max}&amp;lt;/math&amp;gt;) is &amp;lt;math&amp;gt;4.3\times10^{-3}&amp;lt;/math&amp;gt;,&lt;br /&gt;
while for &amp;lt;math&amp;gt;T&amp;gt;6&amp;lt;/math&amp;gt; it is less than &amp;lt;math&amp;gt;10^{-3}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Similar expressions obtained using the Euler–Maclaurin formula converge more slowly, even with first-order correction terms.&lt;br /&gt;
&lt;br /&gt;
A simpler but less accurate approximation is obtained by fitting the Iwerlipse to the generalized superellipse:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \left(\frac{x_T - x_0}{x_\mathrm{max}}\right)^{m(T)} + \left(\frac{z_T - \langle z \rangle}{x_\mathrm{max}}\right)^{n(T)} = 1. &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimal exponents &amp;lt;math&amp;gt;m(T)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;n(T)&amp;lt;/math&amp;gt; have been found up to &amp;lt;math&amp;gt;T=150&amp;lt;/math&amp;gt; (5 seconds), and can be obtained from a lookup table&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1xDmgHz878qiAS1ZF1Y5M0M1eiZUdZRSl/view?usp=sharing Showing Iwer&#039;s proof and deriving the Iwerlipse expressions.]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Unlike the integral approximation, this expression never converges to the exact result — there is always some small error.&lt;br /&gt;
&lt;br /&gt;
== Quarterstep Penalty ==&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;math&amp;gt;q \in {0,1,2,3}&amp;lt;/math&amp;gt; quartersteps are lost on the final frame,&lt;br /&gt;
the forward velocity gained on frame &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; no longer accumulates forward distance over &amp;lt;math&amp;gt;T+1-t&amp;lt;/math&amp;gt; frames,&lt;br /&gt;
but instead over &amp;lt;math&amp;gt;T - q/4 + 1 - t&amp;lt;/math&amp;gt; frames.&lt;br /&gt;
The optimal straining relation becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background:#f9f9f9; border-left:3px solid #bbb; padding:0.4em 0.8em; margin:1em 0;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;math&amp;gt; \tan(\phi_{t&#039;}) = \begin{cases} \dfrac{10\tan(\omega)}{1.5(T - q/4 + 1 - t)}, &amp;amp; \text{if } t &amp;lt; T,\\[10pt] \dfrac{10\tan(\omega)}{1.5}, &amp;amp; \text{if } t = T. \end{cases} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The optimal straining angle for the final frame is not affected, since in this case the ellipse shrinks in both directions rather than just vertically, i.e. a factor &amp;lt;math&amp;gt;1-q/4&amp;lt;/math&amp;gt; cancels in the numerator and denominator.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;2 July 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Plush discovers that during a dive recover, one can gain greater distance along an angle different from Mario&#039;s facing angle by “flinging” the control stick through different angles during the trajectory, rather than holding it at a constant angle.&lt;br /&gt;
&lt;br /&gt;
Pannenkoek qualitatively explains this phenomenon that would later be known as &#039;&#039;arctan straining&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote style=&amp;quot;font-style: italic;&amp;quot;&amp;gt;&lt;br /&gt;
I think you&#039;re supposed to hold forward-ish for most of it, then sideways at the end. Because sideways movement doesn&#039;t depend on your speed. So 5 frames of sideways holding at the start of the DR is equivalent to the 5 frames at the end. But forward distance depends on your hspeed. So let&#039;s say you start with some hspeed. If you go sideways then forwards, then you&#039;ll lose that hspeed. But if you go forward then sideways, then you&#039;ll take advantage of your starting hspeed. The best inputs would probably mix sideways and forwards somewhat.  &lt;br /&gt;
&amp;lt;br /&amp;gt; — &amp;lt;b&amp;gt;Pannenkoek2012&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Peter Fedak shares the correct velocity update equations, and the three of them begin to consider what the mathematically optimal inputs are.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 September 2017&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer Sonsch independently rediscovers the velocity update equations and realises that by facing along the hypotenuse of the forward velocity and sideways speed — a trick known in other speedrunning communities as &#039;&#039;vectoring&#039;&#039; — he can gain greater distance in a single frame.  &lt;br /&gt;
He wonders how this would look over multiple frames, restarting the discussion of optimal straining.  &lt;br /&gt;
However, there is no quantitative progress until it becomes relevant to the A Button Challenge the following year.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;18 March 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
The “Blast to the Stone Pillar” star in JRB is collected in 0 A presses for the first time, after Tyler Kehne figures out how to use conserved speed to get from the nearby pillar to the star platform.&lt;br /&gt;
&lt;br /&gt;
The community turns their attention to whether the “Treasure of the Ocean Cave” star can be collected in a similar way, again reviving the optimal straining question, as people including Iwer, bad_boot, and DeRockProject begin attempting to make the most of the limited speed they have available.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;16 April 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer states the optimal straining equation for the first time in the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\phi_{t&#039;} - \theta = \operatorname{arccot}(0.15\,r\,t&#039;)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is equivalent to our expression above, since &amp;lt;math&amp;gt;\operatorname{arccot}(x) = \arctan(1/x)&amp;lt;/math&amp;gt;,  &lt;br /&gt;
with, &amp;lt;math&amp;gt;r = 1/\tan(\omega)&amp;lt;/math&amp;gt;, and, &amp;lt;math&amp;gt;t&#039; = T + 1 - t&amp;lt;/math&amp;gt;.  &lt;br /&gt;
(If using this expression, we need to add 180° if the target angle is to the right of Mario, since &amp;lt;math&amp;gt;\operatorname{arccot}&amp;lt;/math&amp;gt; only gives results between 0° and 180°.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;23 June 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Pannenkoek posts an idea for collecting the “Scale the Mountain” star in TTM via a dive recover.  &lt;br /&gt;
To find out whether it was possible, Iwer, Grassdigger, Jane, bad_boot, and DeRockProject work to plot all of Mario’s possible positions while air straining.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;20 August 2018&amp;lt;/div&amp;gt;&lt;br /&gt;
Iwer discovers the exact equations describing Mario&#039;s possible positions after &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; frames. Grassdigger and DeRockProject then show that the total shape can be well approximated by a generalised superellipse.  &lt;br /&gt;
Pannenkoek proposes calling it the &#039;&#039;Iwerlipse&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;3 October 2019&amp;lt;/div&amp;gt;&lt;br /&gt;
Silverstrawb provides an alternative proof&amp;lt;ref&amp;gt;[https://drive.google.com/file/d/1df97glqVn-cXEUmP15vNxgQtwa8jJK2w/view?usp=sharing Showing Silverstrawb&#039;s proof.]&amp;lt;/ref&amp;gt; of the optimal straining relation by converting the discrete update equations into the continuous differential equations&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
\dot{x} &amp;amp;= 10 \sin(\phi(t)),\\&lt;br /&gt;
\ddot{z} &amp;amp;= 1.5 \cos(\phi(t)) - D,&lt;br /&gt;
\end{align}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and using the calculus of variations.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;29 July 2020&amp;lt;/div&amp;gt;&lt;br /&gt;
Krithalith independently rediscovers Iwer’s original proof and extends it to include quartersteps.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size:120%; font-weight:bold; margin-top:1em;&amp;quot;&amp;gt;27 November 2021&amp;lt;/div&amp;gt;&lt;br /&gt;
sm64expert adds arctan straining to MKDasher’s input direction LUA program, making it accessible to everyone for the first time.&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{#ev:youtube|_yx0eutBwII}}&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=File:Iwerlipse_Construction_Smaller.gif&amp;diff=19854</id>
		<title>File:Iwerlipse Construction Smaller.gif</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=File:Iwerlipse_Construction_Smaller.gif&amp;diff=19854"/>
		<updated>2025-10-16T14:15:26Z</updated>

		<summary type="html">&lt;p&gt;Omedas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Iwerlipse construction over 10 frames via Arctan Straining&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=File:Iwerlipse_Construction.gif&amp;diff=19853</id>
		<title>File:Iwerlipse Construction.gif</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=File:Iwerlipse_Construction.gif&amp;diff=19853"/>
		<updated>2025-10-16T13:48:07Z</updated>

		<summary type="html">&lt;p&gt;Omedas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Construction of the Iwerlipse over 10 frames via Arctan Straining&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19851</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19851"/>
		<updated>2025-10-13T18:13:40Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Undo revision 19850 by Omedas (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; is the range of positions Mario can occupy when Mario is in the air and cannot turn, assuming the joystick input polling were continuous. It is defined as an area bounded by a shape drawn by the solution to optimizing a set of 2 differential equations. Due to the shape being similar to a superellipse (after Grassdigger brute forced for the solution in Mathematica), Pannenkoek2012 proposed calling this shape the &amp;quot;Iwerlipse&amp;quot; on August 2018 (pronounced eeverlipse /ˈivɜlɪps/) as a pun on the name of Iwer Sonsch, one of the people involved in this problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The set of differential equations is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{dx}{dt} = v_x\cos[f(t)]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d^2y}{dt^2} = a\sin[f(t)] - D &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;f(t)&#039;&#039; is the function for a SM64 player&#039;s joystick tilt in terms of time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;a&#039;&#039; is forward acceleration, and is usually defined in game as 1.5.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;v&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; is sideways velocity and is usually defined in game as 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;D&#039;&#039; is drag, which usually can be values: +2.35, +0.35, 0, -0.35, -1.35. For TASing purposes, where high speed is always ideal, &#039;&#039;D&#039;&#039; is most commonly set to -1.35, for cases when Mario&#039;s forward speed is above 32.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem was posed by DeRockProject as a curiosity, and it became relevant to the ABC challenge a few times before being solved through some other means.&lt;br /&gt;
&lt;br /&gt;
Iwer stated on April 2018 that optimal straining for the Air_no_Turn action is &amp;lt;math&amp;gt;\text{dyaw}(t,r) = \text{acotan}(0.15r*t) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
On October 2019, Silverstrawb provided a full analytical proof for Iwer&#039;s claim, using a generalized 2nd-order Euler-Lagrange equation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By plugging Iwer and Silverstrawb&#039;s equation to solve for x and y, we obtain the parametric equations, the solution to the Iwerlipse after &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; frames:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(n,t) = \pm \frac{v_xnt}{\sinh(t)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(n,t) = v_in + \frac{a}{2}n^2\bigg(\coth(t)-\frac{t}{\sinh^2(t)}-\frac{D}{a}\bigg)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
==References==&lt;br /&gt;
Proof of the optimal straining equation :&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:IwerlipseProof.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19850</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19850"/>
		<updated>2025-10-13T17:55:59Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Remove explicit mention of DeRockProject, for obvious reasons, and also because many people proposed the question around the same time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; is the range of positions Mario can occupy when Mario is in the air and cannot turn, assuming the joystick input polling were continuous. It is defined as an area bounded by a shape drawn by the solution to optimizing a set of 2 differential equations. Due to the shape being similar to a superellipse (after Grassdigger brute forced for the solution in Mathematica), Pannenkoek2012 proposed calling this shape the &amp;quot;Iwerlipse&amp;quot; on August 2018 (pronounced eeverlipse /ˈivɜlɪps/) as a pun on the name of Iwer Sonsch, one of the people involved in this problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The set of differential equations is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{dx}{dt} = v_x\cos[f(t)]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d^2y}{dt^2} = a\sin[f(t)] - D &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;f(t)&#039;&#039; is the function for a SM64 player&#039;s joystick tilt in terms of time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;a&#039;&#039; is forward acceleration, and is usually defined in game as 1.5.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;v&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; is sideways velocity and is usually defined in game as 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;D&#039;&#039; is drag, which usually can be values: +2.35, +0.35, 0, -0.35, -1.35. For TASing purposes, where high speed is always ideal, &#039;&#039;D&#039;&#039; is most commonly set to -1.35, for cases when Mario&#039;s forward speed is above 32.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem was posed by the TASing/ABC community as a curiosity, and it became relevant to the ABC challenge a few times before being solved through some other means.&lt;br /&gt;
&lt;br /&gt;
Iwer stated on April 2018 that optimal straining for the Air_no_Turn action is &amp;lt;math&amp;gt;\text{dyaw}(t,r) = \text{acotan}(0.15r*t) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
On October 2019, Silverstrawb provided a full analytical proof for Iwer&#039;s claim, using a generalized 2nd-order Euler-Lagrange equation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By plugging Iwer and Silverstrawb&#039;s equation to solve for x and y, we obtain the parametric equations, the solution to the Iwerlipse after &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; frames:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(n,t) = \pm \frac{v_xnt}{\sinh(t)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(n,t) = v_in + \frac{a}{2}n^2\bigg(\coth(t)-\frac{t}{\sinh^2(t)}-\frac{D}{a}\bigg)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
==References==&lt;br /&gt;
Proof of the optimal straining equation :&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:IwerlipseProof.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
	<entry>
		<id>https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19430</id>
		<title>Iwerlipse</title>
		<link rel="alternate" type="text/html" href="https://ukikipedia.net/mediawiki/index.php?title=Iwerlipse&amp;diff=19430"/>
		<updated>2024-10-17T11:29:53Z</updated>

		<summary type="html">&lt;p&gt;Omedas: Change Ellie&amp;#039;s (Silverstrawb&amp;#039;s) name as per her request.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;Iwerlipse&#039;&#039;&#039; is the range of positions Mario can occupy when Mario is in the air and cannot turn, assuming the joystick input polling were continuous. It is defined as an area bounded by a shape drawn by the solution to optimizing a set of 2 differential equations. Due to the shape being similar to a superellipse (after Grassdigger brute forced for the solution in Mathematica), Pannenkoek2012 proposed calling this shape the &amp;quot;Iwerlipse&amp;quot; on August 2018 (pronounced eeverlipse /ˈivɜlɪps/) as a pun on the name of Iwer Sonsch, one of the people involved in this problem.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The set of differential equations is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{dx}{dt} = v_x\cos[f(t)]&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\frac{d^2y}{dt^2} = a\sin[f(t)] - D &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;f(t)&#039;&#039; is the function for a SM64 player&#039;s joystick tilt in terms of time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;a&#039;&#039; is forward acceleration, and is usually defined in game as 1.5.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;v&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;&#039;&#039; is sideways velocity and is usually defined in game as 10.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;D&#039;&#039; is drag, which usually can be values: +2.35, +0.35, 0, -0.35, -1.35. For TASing purposes, where high speed is always ideal, &#039;&#039;D&#039;&#039; is most commonly set to -1.35, for cases when Mario&#039;s forward speed is above 32.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The problem was posed by jongyon7192p as a curiosity, and it became relevant to the ABC challenge a few times before being solved through some other means.&lt;br /&gt;
&lt;br /&gt;
Iwer stated on April 2018 that optimal straining for the Air_no_Turn action is &amp;lt;math&amp;gt;\text{dyaw}(t,r) = \text{acotan}(0.15r*t) &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
On October 2019, Silverstrawb provided a full analytical proof for Iwer&#039;s claim, using a generalized 2nd-order Euler-Lagrange equation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
By plugging Iwer and Silverstrawb&#039;s equation to solve for x and y, we obtain the parametric equations, the solution to the Iwerlipse after &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; frames:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;x(n,t) = \pm \frac{v_xnt}{\sinh(t)} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;y(n,t) = v_in + \frac{a}{2}n^2\bigg(\coth(t)-\frac{t}{\sinh^2(t)}-\frac{D}{a}\bigg)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
[[Straining]]&lt;br /&gt;
==References==&lt;br /&gt;
Proof of the optimal straining equation :&amp;lt;br&amp;gt; &lt;br /&gt;
[[File:IwerlipseProof.png]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Mechanics]]&lt;/div&gt;</summary>
		<author><name>Omedas</name></author>
	</entry>
</feed>