Open in TheBrain

Quaternions and 3d rotation, explained interactively

<div id="meta" class="style-scope ytd-watch-flexy">

<div id="meta-contents" class="style-scope ytd-watch-flexy">

<div id="container" class="style-scope ytd-video-secondary-info-renderer">

<div id="top-row" class="style-scope ytd-video-secondary-info-renderer">

<div id="upload-info" class="style-scope ytd-video-owner-renderer">

<div id="container" class="style-scope ytd-channel-name">

<div id="text-container" class="style-scope ytd-channel-name"><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw">3Blue1Brown</a></div>

</div>

<div class="badge badge-style-type-verified style-scope ytd-badge-supported-renderer">&nbsp;</div>

2.15M subscribers</div>

<div id="sponsor-button" class="style-scope ytd-video-owner-renderer">&nbsp;</div>

<div id="analytics-button" class="style-scope ytd-video-owner-renderer">&nbsp;</div>

<div id="subscribe-button" class="style-scope ytd-video-secondary-info-renderer">SUBSCRIBED

<div id="notification-preference-toggle-button" class="style-scope ytd-subscribe-button-renderer">&nbsp;</div>

<div id="notification-preference-button" class="style-scope ytd-subscribe-button-renderer">&nbsp;</div>

</div>

</div>

<div id="content" class="style-scope ytd-expander">

<div id="description" class="style-scope ytd-video-secondary-info-renderer">Go experience the explorable videos: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Feater.net%2Fquaternions" target="blank" rel="nofollow">https://eater.net/quaternions</a> Ben Eater's channel: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/user/eaterbc" rel="nofollow">https://www.youtube.com/user/eaterbc</a> Brought to you by you: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=http%3A%2F%2F3b1b.co%2Fquaternion-explorable-thanks" target="blank" rel="nofollow">http://3b1b.co/quaternion-explorable-...</a> Previous video on Quaternions: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/watch?v=d4EgbgTm0Bg">https://youtu.be/d4EgbgTm0Bg</a> Nice explanation of Gimbal Lock: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/watch?v=zc8b2Jo7mno">https://youtu.be/zc8b2Jo7mno</a> Great videos comparing Euler angles and quaternions, from the perspective of an animator: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/watch?v=syQnn_xuB8U">https://youtu.be/syQnn_xuB8U</a> <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/watch?v=4mXL751ko0w">https://youtu.be/4mXL751ko0w</a> Music by Vincent Rubinetti: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fvincerubinetti.bandcamp.com%2Falbum%2Fthe-music-of-3blue1brown" target="blank" rel="nofollow">https://vincerubinetti.bandcamp.com/a...</a> ------------------ 3blue1brown is a channel about animating math, in all senses of the word animate. And you know the drill with YouTube, if you want to stay posted on new videos, subscribe: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=http%3A%2F%2F3b1b.co%2Fsubscribe" target="blank" rel="nofollow">http://3b1b.co/subscribe</a> Various social media stuffs: Website: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fwww.3blue1brown.com" target="blank" rel="nofollow">https://www.3blue1brown.com</a> Twitter: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Ftwitter.com%2F3blue1brown" target="blank" rel="nofollow">https://twitter.com/3blue1brown</a> Reddit: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fwww.reddit.com%2Fr%2F3blue1brown" target="blank" rel="nofollow">https://www.reddit.com/r/3blue1brown</a> Instagram: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fwww.instagram.com%2F3blue1brown_animations%2F" target="blank" rel="nofollow">https://www.instagram.com/3blue1brown...</a> Patreon: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fpatreon.com%2F3blue1brown" target="blank" rel="nofollow">https://patreon.com/3blue1brown</a> Facebook: <a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/redirect?v=zjMuIxRvygQ&amp;redir_token=AfK-1dl9yQ2FI4c37aJ_3Z5CVed8MTU3MDkzNTgxMkAxNTcwODQ5NDEy&amp;event=video_description&amp;q=https%3A%2F%2Fwww.facebook.com%2F3blue1brown" target="blank" rel="nofollow">https://www.facebook.com/3blue1brown</a></div>

</div>

<div id="always-shown" class="style-scope ytd-metadata-row-container-renderer">&nbsp;</div>

<div id="collapsible" class="style-scope ytd-metadata-row-container-renderer">

<h4 id="title" class="style-scope ytd-metadata-row-renderer">Caption authors (Spanish)</h4>

<div id="content" class="style-scope ytd-metadata-row-renderer"><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/channel/UC8tic89FnDFfRCNRHIEQY6w">MATECLIPS</a><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/channel/UCIgANqQeTg3llfnibt0gj8w">Javier Wagner</a></div>

<h4 id="title" class="style-scope ytd-metadata-row-renderer">Caption author (Chinese (Taiwan))</h4>

<div id="content" class="style-scope ytd-metadata-row-renderer"><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/channel/UCXDjd2cYZmlS1eYlQYspoOQ">ginkos</a></div>

<h4 id="title" class="style-scope ytd-metadata-row-renderer">Category</h4>

<div id="content" class="style-scope ytd-metadata-row-renderer"><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="https://www.youtube.com/channel/UCdxpofrI-dO6oYfsqHDHphw">Education</a></div>

</div>

SHOW LESS</div>

</div>

</div>

<div id="ticket-shelf" class="style-scope ytd-watch-flexy">&nbsp;</div>

<div id="header" class="style-scope ytd-item-section-renderer">

<div id="title" class="style-scope ytd-comments-header-renderer">

<div id="panels" class="style-scope ytd-watch-flexy">

<div id="content" class="style-scope ytd-engagement-panel-section-list-renderer">

<div id="body" class="style-scope ytd-transcript-renderer">

<div class="cue-group style-scope ytd-transcript-body-renderer active">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:03</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer active">In a moment, I&rsquo;ll point you to a separate website hosting a short sequence of what we&rsquo;re</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:07</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">calling &ldquo;explorable videos&rdquo;.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:09</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">It was done in collaboration with Ben Eater, who runs an excellent channel about Computer</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:14</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Engineering which viewers of this channel would definitely enjoy, and all the web development</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:25</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">that made these explorable videos possible is thanks to him.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:29</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">I don&rsquo;t want to say too much about it now, it&rsquo;s really something that you have to experience</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:33</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">for yourself.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:35</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Certainly one of the coolest things I&rsquo;ve had the pleasure of working on.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:40</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">So to set the stage, last video I described quaternions, a certain 4-dimensional number</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:51</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">system that the 19th-century versions of Wolverine and the old man from Home Alone called &ldquo;evil&rdquo;</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:56</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">for how convoluted it seemed at the time.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">00:59</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">And perhaps you too are wondering why on earth anyone would bother with such an alien-seeming</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:03</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">number system.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:05</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">One of the big reasons, especially for programmers, is that they give a really nice way for describing</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:10</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">a 3d orientation which is not susceptible to the bugs and edge-cases of other methods.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:15</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">I mean, they&rsquo;re interesting mathematically for a lot of reasons, but this</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:24</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">is probably their biggest practical application.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:27</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">To take one example, a friend of mine who used to work at Apple, Andy Matuschak, delighted</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:31</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">in telling me about shipping code to hundreds of millions of devices that uses quaternions</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:36</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">to track the phone&rsquo;s model for how it&rsquo;s oriented in space.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:39</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">That&rsquo;s right, your phone almost certainly has software running inside it that rely on</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:44</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">quaternions.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:46</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">The thing is, there are other ways to think about and compute rotations, many of which</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:50</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">are way simpler to think about than quaternions.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:53</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">For example, any of you familiar with linear algebra will know that 3x3 matrices can really</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">01:58</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">nicely describe 3d orientation, and a common way many programmers like to think about constructing</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:04</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">one of these matrices for a desired orientation is to imagine rotating an object around three</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:10</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">easy-to-think-about axes, where the relevant angles for these rotations are commonly called</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:14</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">&ldquo;Euler angles&rdquo;.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:16</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">This mostly works, but one big problem is that it&rsquo;s vulnerable to is something called</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:20</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">&ldquo;gimbal lock&rdquo;, where two of your axes of rotation get lined up and you lose a degree</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:25</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">of freedom.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:26</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">It can also cause difficulties when trying to interpolate between two orientations.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:34</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">There are many great resources online for learning about Euler angles and Gimbal lock,</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:38</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">and I&rsquo;ve left links in the description to a few.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:41</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Not only do quaternions avoid issues like gimbal lock, they give a very seamless way</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:45</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">to interpolate between two three-dimensional orientations, one which lacks ambiguities</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:50</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">of Euler angles, and which avoids the issues of numerical precision and normalization that</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:54</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">arise in trying to interpolate between two rotation matrices.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">02:58</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">To warm up to the idea of how multiplication in some higher dimensional number system might</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:03</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">be used to compute rotations, take a moment to remember how complex numbers give a slick</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:08</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">method for computing 2d rotations.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:10</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Specifically, let&rsquo;s say you have some point in 2d space, like (4, 1), and you want to</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:16</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">know the new coordinates you&rsquo;d get after rotating it 30 degrees.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:22</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Complex numbers give sort of a snazzy way to do this: Take the complex number 30 degrees</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:27</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">off the horizontal, a distance 1 from the origin, cos(30o) + sin(30o)i.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:33</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Now just multiply this by your point, represented as a complex number.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:37</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">The only rule you need to know to carry out this computation is that i2 = -1, and in</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:43</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">what might feel like a bit of magic to those first learning it, carrying out this product</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:47</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">from that one simple rule gives the coordinates of a new point, rotated 30 degrees away from</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:53</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">the original.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">03:55</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Using quaternions to describe 3d rotations is similar, though the look and feel is slightly</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:00</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">different.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:01</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Let&rsquo;s say you want to rotate some angle around some axis.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:04</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">First, define that axis with a unit vector, which we&rsquo;ll write as having i, j and k components,</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:10</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">normalized so that the sum of their squares is 1.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:15</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Similar to the case of complex numbers, you use the angle to construct a quaternion by</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:19</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">taking cos(that angle) as the real part, plus sin(that angle) times an imaginary part, except</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:26</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">this time the imaginary part is the 3d axis of rotation.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:31</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Well, actually you take half that angle, which might feel totally arbitrary, but hopefully</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:37</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">that will make some sense by the end of this whole experience.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:39</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Now let&rsquo;s say you have some 3d point, which we&rsquo;ll write with ijk, components, and you</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:45</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">want to know the coordinates of what you&rsquo;ll get by rotating this point by your specified</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:49</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">angle around your specified axis.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:52</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">What you do is not just a single quaternion product, but a quaternion sandwich, where</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">04:57</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">you multiply by q from the left and the inverse of q from the right.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:02</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">If you know how i, j and k multiply amongst themselves, you can carry out these two products</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:08</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">by expanding everything out, or more likely by having a computer do so.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:12</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">And, in what might feel like a bit of black magic, this big computation will return for</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:18</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">you the rotated version of the point.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:21</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">Our goal is to break down and visualize what&rsquo;s happening with these two products.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:25</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">I&rsquo;ll review the method for thinking about quaternion multiplication described last video,</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:30</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">explain why half the angle is used, and why you multiply from the right by the inverse.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:35</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">On the screen, and at the top of the description, is a link to the website Ben Eater setup with</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:42</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">the explorable videos.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:45</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">It&rsquo;s...it&rsquo;s just really cool, Eater did something awesome here.</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:50</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">At the very least, you should go take a quick look, but I&rsquo;d love it if you went through</div>

</div>

</div>

<div class="cue-group style-scope ytd-transcript-body-renderer">

<div class="cue-group-start-offset style-scope ytd-transcript-body-renderer">05:54</div>

<div class="cues style-scope ytd-transcript-body-renderer">

<div class="cue style-scope ytd-transcript-body-renderer">the full experience.</div>

</div>

</div>

</div>

<div id="footer" class="style-scope ytd-transcript-renderer">

<div id="menu" class="style-scope ytd-transcript-footer-renderer">

<div id="trigger" class="style-scope paper-menu-button">

<div id="label-text" class="style-scope yt-dropdown-menu">English</div>

</div>

</div>

</div>

</div>

</div>

<div id="donation-shelf" class="style-scope ytd-watch-flexy">&nbsp;</div>

<div id="related" class="style-scope ytd-watch-flexy">

<div id="offer-module" class="style-scope ytd-watch-next-secondary-results-renderer">&nbsp;</div>

<div id="items" class="style-scope ytd-watch-next-secondary-results-renderer">&nbsp;</div>

</div>

</div>

<div class="style-scope ytd-comments-header-renderer">&nbsp;</div>

</div>

Attachments