mirror of
https://github.com/peter-tanner/legacy_site.git
synced 2024-11-30 14:20:16 +08:00
2.5d rotation article, attempt to get highlight.js and tikzjax working
This commit is contained in:
parent
f4973746cd
commit
cb81351077
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
*.ipynb
|
|
@ -22,10 +22,10 @@
|
||||||
<a href="https://atar-wace-archive.github.io/">https://atar-wace-archive.github.io/</a><br>
|
<a href="https://atar-wace-archive.github.io/">https://atar-wace-archive.github.io/</a><br>
|
||||||
<br>
|
<br>
|
||||||
Maths page - specialist and methods ramblings<br>
|
Maths page - specialist and methods ramblings<br>
|
||||||
<a href="https://npc-strider.github.io/math">https://atar-wace-archive.github.io/math</a><br>
|
<a href="https://npc-strider.github.io/math">https://npc-strider.github.io/math</a><br>
|
||||||
<br>
|
<br>
|
||||||
Programming ramblings - do not expect clean code here!<br>
|
Programming ramblings - do not expect clean code here!<br>
|
||||||
<a href="https://npc-strider.github.io/code">https://atar-wace-archive.github.io/code</a><br>
|
<a href="https://npc-strider.github.io/code">https://npc-strider.github.io/code</a><br>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
<br>
|
<br>
|
||||||
|
|
420
math/2.5d rotations.html
Normal file
420
math/2.5d rotations.html
Normal file
|
@ -0,0 +1,420 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>📝 2.5d rotations wtih shear transformation</title>
|
||||||
|
<meta name="description" content="2.5d rotations wtih shear transformation">
|
||||||
|
<meta name="viewport" content="width=device-width">
|
||||||
|
<title>MathJax example</title>
|
||||||
|
<script>
|
||||||
|
MathJax = {
|
||||||
|
tex: { macros: {cis: "\\mathop{\\rm{cis}}\\nolimits"} },
|
||||||
|
chtml: { displayAlign: 'center', scale: 1.1 }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.1/highlight.min.js"></script>
|
||||||
|
<script>hljs.initHighlightingOnLoad();</script>
|
||||||
|
<script src="./tikzjax.js"></script>
|
||||||
|
<script id="MathJax-script" async
|
||||||
|
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js">
|
||||||
|
</script>
|
||||||
|
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.1/styles/default.min.css">
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous">
|
||||||
|
<link rel="stylesheet" type="text/css" href="http://tikzjax.com/v1/fonts.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<center>
|
||||||
|
<h1>2.5d rotations with matrix transformations</h1>
|
||||||
|
<h3><s>(WACE) Mathematics Specialist ATAR</s><b style="color: red;">**</b></h3>
|
||||||
|
</center>
|
||||||
|
<div class="card bg-danger">
|
||||||
|
<div class="card-body" style="color: white;">
|
||||||
|
<center><h4><b>⚠WARNING⚠</b></h4></center>
|
||||||
|
<h5>At this point this article is probably outside of the curriculum. The transformations are in the curriculum, but most of this article is on a real math problem I've experienced which of course requires a bit of programming.</h5>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a class="link" style="left:1%; top: 1%;" href="https://npc-strider.github.io/maths">🔗 Back to MATHS home page</a><br>
|
||||||
|
<a class="link" style="left:1%; top: 1%;" href="https://npc-strider.github.io">🔗 Back to home page</a><br>
|
||||||
|
|
||||||
|
Warning: This page requires javascript to render the math.
|
||||||
|
|
||||||
|
<hr><br>
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<center><b>Introduction - What is '2.5d'?</b></center>
|
||||||
|
'2.5d' is not an actual dimension, but refers to techniques in computer graphics which aim to create the presence of 3d depth, but in a 2d level or environment.<br><br>
|
||||||
|
<center>
|
||||||
|
<script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw (-2.5,0) rectangle (2.5,3);
|
||||||
|
\draw [fill=gray] (-2.5,0) rectangle (2.5,-3);
|
||||||
|
|
||||||
|
\node [label=left:{[-2.5, 0]}] at (-2.5,0) {\textbullet};
|
||||||
|
\node [label=right:{[2.5, 0]}] at (2.5,0) {\textbullet};
|
||||||
|
\node [label=right:{[2.5, 3]}] at (2.5,3) {\textbullet};
|
||||||
|
\node [label=right:{[2.5, -3]}] at (2.5,-3) {\textbullet};
|
||||||
|
\node [label=left:{[-2.5, 3]}] at (-2.5,3) {\textbullet};
|
||||||
|
\node [label=left:{[-2.5, -3]}] at (-2.5,-3) {\textbullet};
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script>
|
||||||
|
</center>
|
||||||
|
This box is a simplified example of 2.5d graphics.<br>
|
||||||
|
The gray on the front-facing side and the white top side is an example of shading, and creates the illusion of a 3d environment as a result of basic lighting. The camera is placed at a 45 degree angle, as we see equal proportions of the top and front faces of the box<br>
|
||||||
|
However, this is not real 3d graphics, as we're representing this box within a 2d space with only 2d position vectors.<br>
|
||||||
|
Therefore, this is 2.5d graphics.
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<center><b>The problem</b></center>
|
||||||
|
I was making a mod for a game that added in rockets. The rockets took a ballistic trajectory to reach a target point<br>
|
||||||
|
Of course, because this is a 2.5d game I couldn't simply model the flight with the actual equations, because there is no concept of 'height' or 'altitude' in the game<br>
|
||||||
|
<br>
|
||||||
|
<center>
|
||||||
|
<script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (0, 0) -- (6, 0) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (0, 0) -- (0, 6) node[above] {$\vec{j}$};
|
||||||
|
\node [label=below:{$\mathbf{S}[1, 1.5]$}] at (1,1.5) {\textbullet};
|
||||||
|
\node [label=below:{$\mathbf{T}[5, 1.5]$}] at (5,1.5) {\textbullet};
|
||||||
|
\draw[scale=1, domain=1:5, smooth, variable=\x, red] plot ({\x}, {-(\x-1)*(\x-5)+1.5});
|
||||||
|
\draw[->, red, dashed] (1,1.5) -- (5,1.5);
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script>
|
||||||
|
</center>
|
||||||
|
This parabola works fine for targets on the same \(\vec{j}\) as the silo<br>
|
||||||
|
What if we want a trajectory like this?
|
||||||
|
<center>
|
||||||
|
<script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (0, 0) -- (6, 0) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (0, 0) -- (0, 6) node[above] {$\vec{j}$};
|
||||||
|
\node [label=below:{$\mathbf{S}[1, 2]$}] at (1,2) {\textbullet};
|
||||||
|
\node [label=above:{$\mathbf{T}[5, 4]$}] at (5,4) {\textbullet};
|
||||||
|
\draw[->, red, dashed] (1,2) -- (5,4);
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script>
|
||||||
|
</center>
|
||||||
|
We can try rotating the parabola, but that results in a trajectory which looks very unrealistic.
|
||||||
|
<center>
|
||||||
|
<script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[scale=1, domain=0:4.47213595, smooth, variable=\x, blue, dashed] plot ({\x}, {-(\x)*(\x-4.47213595)});
|
||||||
|
\draw[->] (0, 0) -- (6, 0) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (0, 0) -- (0, 6) node[above] {$\vec{j}$};
|
||||||
|
\node [label=below:{$\mathbf{S}[1, 2]$}] at (1,2) {\textbullet};
|
||||||
|
\node [label=above:{$\mathbf{T}[5, 4]$}] at (5,4) {\textbullet};
|
||||||
|
\draw[shift={(1,2)}, scale=1, domain=0:4.5, smooth, variable=\x, red, rotate=30] plot ({\x}, {-(\x)*(\x-4.47213595)});
|
||||||
|
\draw[->, red, dashed] (1,2) -- (5,4);
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script>
|
||||||
|
</center>
|
||||||
|
The blue dashed parabola represents the pre-transformed trajectory (we are only given the distance \(d\) from target \(\mathbf{T}\) to silo \(\mathbf{S}\))<br>
|
||||||
|
|
||||||
|
<div class="alert alert-warning" role="alert">
|
||||||
|
<center>How this transformation is achieved [Advanced]</center>
|
||||||
|
<br>
|
||||||
|
Our transformation requires a shift. We can't just add two matrices of different dimensions so we need to somehow represent the shift as a matrix multiplication. For this we need a <b>homogeneous coordinate</b><br>
|
||||||
|
We represent a 2d vector as a 3d vector, but the \(\vec{k}\) component is a constant \(1\). This constant allows the addition of the shift through matrix multiplication. <br>
|
||||||
|
\[\mathbf{X}=\begin{bmatrix}
|
||||||
|
x_0 & x_1 & x_2 & x_3 & x_4 & x_5 & \dots \\
|
||||||
|
y_0 & y_1 & y_2 & y_3 & y_4 & y_5 & \dots \\
|
||||||
|
1 & 1 & 1 & 1 & 1 & 1 & \dots
|
||||||
|
\end{bmatrix}\]
|
||||||
|
In this case, we applied the following transformations to <b>rotate</b> then <b>translate</b> \(\mathbf{T}\) into 'inaccurate' trajectory, \(\mathbf{T'}\)
|
||||||
|
\begin{align}
|
||||||
|
\mathbf{X'} &= \begin{bmatrix}
|
||||||
|
1 & 0 & \Delta{x} \\
|
||||||
|
0 & 1 & \Delta{y} \\
|
||||||
|
0 & 0 & 1 \\
|
||||||
|
\end{bmatrix}\begin{bmatrix}
|
||||||
|
\cos(\theta) & -\sin(\theta) & 0 \\
|
||||||
|
\sin(\theta) & \cos(\theta) & 0 \\
|
||||||
|
0 & 0 & 1 \\
|
||||||
|
\end{bmatrix}\mathbf{X}
|
||||||
|
\\\\
|
||||||
|
&= \begin{bmatrix}
|
||||||
|
1 & 0 & 1 \\
|
||||||
|
0 & 1 & 2 \\
|
||||||
|
0 & 0 & 1 \\
|
||||||
|
\end{bmatrix}\begin{bmatrix}
|
||||||
|
\cos(\frac{\pi}{6}) & -\sin(\frac{\pi}{6}) & 0 \\
|
||||||
|
\sin(\frac{\pi}{6}) & \cos(\frac{\pi}{6}) & 0 \\
|
||||||
|
0 & 0 & 1 \\
|
||||||
|
\end{bmatrix}\mathbf{X}
|
||||||
|
\end{align}
|
||||||
|
However, in reality I would just use a for loop and iterate through each pair of points.<br>
|
||||||
|
<pre><code class="python">import math
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def rotate(theta):
|
||||||
|
return np.array([[cos(theta), -sin(theta)],
|
||||||
|
[sin(theta), cos(theta)]])
|
||||||
|
|
||||||
|
T = [[0,0], ... ,[4,0]] #Our starting list of points T
|
||||||
|
T_ = []
|
||||||
|
|
||||||
|
C = [1,2]
|
||||||
|
R = rotate(math.pi/6) #Rotation matrix when theta=pi/6. Store to R to save function calls
|
||||||
|
|
||||||
|
for P in T:
|
||||||
|
P = np.array(P) #convert python list (A point P, like [0,0]) to numpy array
|
||||||
|
P_ = np.add( np.matmul(R,P), C ) #multiply with rotation matrix R (matmul), then add C
|
||||||
|
T_.append(P_) #Add our transformed point P_ to our transformed list, T_
|
||||||
|
end
|
||||||
|
# T_ is now our transformed matrix.
|
||||||
|
</code></pre>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<center><b>Shear matrices</b></center>
|
||||||
|
\begin{align}
|
||||||
|
\text{Parallel to the y-axis, Vertical shear}\quad
|
||||||
|
\mathbf{X'} &= \begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
m & 1
|
||||||
|
\end{bmatrix}\mathbf{X}\\
|
||||||
|
&= \begin{bmatrix}
|
||||||
|
x\\
|
||||||
|
mx+y
|
||||||
|
\end{bmatrix} \\\\
|
||||||
|
\text{Parallel to the x-axis, Horizontal shear}\quad
|
||||||
|
\mathbf{X'} &= \begin{bmatrix}
|
||||||
|
1 & m\\
|
||||||
|
0 & 1
|
||||||
|
\end{bmatrix}\mathbf{X} \\
|
||||||
|
&= \begin{bmatrix}
|
||||||
|
x+my\\
|
||||||
|
y
|
||||||
|
\end{bmatrix}\\\\
|
||||||
|
\text{Where}\quad\mathbf{X} &= \begin{bmatrix}
|
||||||
|
x\\
|
||||||
|
y
|
||||||
|
\end{bmatrix}\\
|
||||||
|
\end{align}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br><hr><br>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<center><b>The solution: shear matrices</b></center><br>
|
||||||
|
A shear matrix is better explained visually.
|
||||||
|
<center><script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (-6, 1) -- (-1, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (-6, 1) -- (-6, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (2, 1) -- (7, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (2, 1) -- (2, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (-0.7,3) -- (1.7,3);
|
||||||
|
\draw (-6,1) rectangle (-2,3);
|
||||||
|
\draw (6,3) -- (2,1) -- (2,3) -- (6,5) -- cycle;
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script></center>
|
||||||
|
In this case we applied a vertical shear (parallel to the y-axis). Our x-values are the same, but our y-values have been transformed in a way that they match the line \(y'=mx+y\) (see the matrix representation).<br>
|
||||||
|
It has almost all of the properties required for our 2.5d rotation - we're only distorting the matrix on one axis and preserving the other. The only issue is that our transformed object will appear longer.<br>
|
||||||
|
<br>
|
||||||
|
In my case, I do not need to know the angle - I can use the gradient between the silo \(\mathbf{S}\) and target \(\mathbf{T}\).
|
||||||
|
\[m=\frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x}\]
|
||||||
|
\(m\) can also be obtained with a trig ratio, yielding the following shear transformation that involve angles rather than gradients.
|
||||||
|
\begin{align}
|
||||||
|
\text{Parallel to the y-axis, Vertical shear}\quad
|
||||||
|
\mathbf{X'} &= \begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
\sin(\theta) & 1
|
||||||
|
\end{bmatrix}\mathbf{X}\\\\
|
||||||
|
\text{Parallel to the x-axis, Horizontal shear}\quad
|
||||||
|
\mathbf{X'} &= \begin{bmatrix}
|
||||||
|
1 & \sin(\theta)\\
|
||||||
|
0 & 1
|
||||||
|
\end{bmatrix}\mathbf{X}\\\\
|
||||||
|
\end{align}
|
||||||
|
To resolve our issue with the transformed object being 'lengthened', we need to scale it back.<br>
|
||||||
|
<center><script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (-6, 1) -- (-1, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (-6, 1) -- (-6, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (2, 1) -- (7, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (2, 1) -- (2, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (-0.7,3) -- (1.7,3);
|
||||||
|
\draw (-6,1) rectangle (-2,3);
|
||||||
|
\draw (6,3) -- (2,1) -- (2,3) -- (6,5) -- cycle;
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P_1}$}] at (-6,1) {\textbullet};
|
||||||
|
\node [label=below:{$\mathbf{P_2}$}] at (-2,1) {\textbullet};
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P'_1}$}] at (2,1) {\textbullet};
|
||||||
|
\node [label=right:{$\mathbf{P'_2}$}] at (6,3) {\textbullet};
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script></center>
|
||||||
|
|
||||||
|
Let's choose two points, \(\mathbf{P_1}\) and \(\mathbf{P_2}\).<br>
|
||||||
|
We obtain the original distance, \(d\) and the transformed distance, \(d'\)
|
||||||
|
\begin{align}
|
||||||
|
d &= \|\mathbf{P_1}-\mathbf{P_2}\| \\
|
||||||
|
&= \sqrt{(\mathbf{P_1}_x-\mathbf{P_2}_x)^2+(\mathbf{P_1}_y-\mathbf{P_2}_y)^2} \\
|
||||||
|
d' &= \|\mathbf{P'_1}-\mathbf{P'_2}\| \\
|
||||||
|
&= \sqrt{(\mathbf{P'_1}_x-\mathbf{P'_2}_x)^2+(\mathbf{P'_1}_y-\mathbf{P'_2}_y)^2}\\\\
|
||||||
|
\text{ where }\quad\mathbf{P'_1},\mathbf{P'_2} &= \begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
\frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x} & 1
|
||||||
|
\end{bmatrix}\mathbf{P_1},\mathbf{P_2}\\
|
||||||
|
&= \begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
\sin(\theta) & 1
|
||||||
|
\end{bmatrix}\mathbf{P_1},\mathbf{P_2}\\
|
||||||
|
|
||||||
|
\end{align}
|
||||||
|
Note that \(d\) is also the distance from the silo \(\mathbf{S}\) and target \(\mathbf{T}\)<br>
|
||||||
|
\(\mathbf{P_1}\) and \(\mathbf{P_2}\) are not the same as \(\mathbf{S}\) and \(\mathbf{T}\), because we've created these points with \(\begin{bmatrix}0\\0\end{bmatrix}\) as the origin, <b>not</b> \(\mathbf{S}\). We will translate all of the points later so that our starting point is \(\mathbf{S}\) after rotating.<br>
|
||||||
|
However, the distances are the same, so we might as well use \(\mathbf{S}\) and \(\mathbf{T}\) to calculate \(d\).
|
||||||
|
\[d = \|\mathbf{P_1}-\mathbf{P_2}\| = \|\mathbf{T}-\mathbf{S}\|\]
|
||||||
|
Our scale factor is simply the ratio between the two.
|
||||||
|
\begin{align}
|
||||||
|
s &= \frac{d}{d'} \\
|
||||||
|
&= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|}
|
||||||
|
\end{align}
|
||||||
|
Putting it all together, our 2.5d rotation is now:
|
||||||
|
\begin{align}
|
||||||
|
\mathbf{X'} &= s\begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
m & 0
|
||||||
|
\end{bmatrix}\mathbf{X}\\
|
||||||
|
&= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|}\cdot\begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
\frac{\mathbf{S}_y-\mathbf{T}_y}{\mathbf{S}_x-\mathbf{T}_x} & 1
|
||||||
|
\end{bmatrix}\mathbf{X}\\
|
||||||
|
\text{ or }\quad &= \frac{\|\mathbf{T}-\mathbf{S}\|}{\|\mathbf{P'_1}-\mathbf{P'_2}\|}\cdot\begin{bmatrix}
|
||||||
|
1 & 0\\
|
||||||
|
\sin(\theta) & 1
|
||||||
|
\end{bmatrix}\mathbf{X}\\\\
|
||||||
|
\end{align}
|
||||||
|
So we need a 'pre transformation' on two points, \(\mathbf{P_1}\) and \(\mathbf{P_2}\) in order to obtain our scale factor
|
||||||
|
<center><script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (-6, 1) -- (-1, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (-6, 1) -- (-6, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (2, 1) -- (7, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (2, 1) -- (2, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (-0.7,3) -- (1.7,3);
|
||||||
|
\draw (-6,1) rectangle (-2,3);
|
||||||
|
\draw (6,3) -- (2,1) -- (2,3) -- (6,5) -- cycle;
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P_1}$}] at (-6,1) {\textbullet};
|
||||||
|
\node [label=below:{$\mathbf{P_2}$}] at (-2,1) {\textbullet};
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P'_1}$}] at (2,1) {\textbullet};
|
||||||
|
\node [label=right:{$\mathbf{P'_2}$}] at (6,3) {\textbullet};
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script></center><br>
|
||||||
|
<center><script type="text/tikz">
|
||||||
|
\begin{tikzpicture}[thick,scale=1, every node/.style={scale=1.9,inner sep=0pt}]
|
||||||
|
\draw[->] (-6, 1) -- (-1, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (-6, 1) -- (-6, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (2, 1) -- (7, 1) node[right] {$\vec{i}$};
|
||||||
|
\draw[->] (2, 1) -- (2, 6) node[above] {$\vec{j}$};
|
||||||
|
\draw[->] (-0.7,3) -- (1.7,3);
|
||||||
|
\draw (-6,1) rectangle (-2,3);
|
||||||
|
\draw (5.36656315,2.68328157) -- (2,1) -- (2,3) -- (5.36656315,4.47213595) -- cycle;
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P_1}$}] at (-6,1) {\textbullet};
|
||||||
|
\node [label=below:{$\mathbf{P_2}$}] at (-2,1) {\textbullet};
|
||||||
|
|
||||||
|
\node [label=below:{$\mathbf{P''_1}$}] at (2,1) {\textbullet};
|
||||||
|
\node [label=right:{$\mathbf{P''_2}$}] at (5.36656315,2.68328157) {\textbullet};
|
||||||
|
\end{tikzpicture}
|
||||||
|
</script></center>
|
||||||
|
The limitation of this technique is that we need to perform the rotation about \(\begin{bmatrix}0\\0\end{bmatrix}\), the origin. After this we can translate the rotated matrix to match the silo and target location.<br>
|
||||||
|
You can use homogeneous coordinates to achieve this (see the yellow box earlier), or programatically do it.<br>
|
||||||
|
<br>
|
||||||
|
We also have to solve one last issue with this method: it only works within the domain \(\left(\frac{\pi}{2}, -\frac{\pi}{2}\right)\).<br>
|
||||||
|
This is because the gradient can only describe so much information.<br>
|
||||||
|
For instance, the line \(f(x)=1\cdot x\).<br>
|
||||||
|
We cannot tell if the line is going from the top-right to bottom-left, or bottom-left to top-right because it describes both situations.<br>
|
||||||
|
We need to adjust the signs on the shear matrix according to the quadrant our target is in.
|
||||||
|
<pre><code class="python">import math
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
def quad(A,B): #A is our origin/fix point, B is our other point.
|
||||||
|
if B[0] > A[0] and B[1] > A[1]:
|
||||||
|
return 1 #First quadrant
|
||||||
|
elif B[0] < A[0] and B[1] > A[1]:
|
||||||
|
return 2 #Second quadrant
|
||||||
|
elif B[0] < A[0] and B[1] < A[1]:
|
||||||
|
return 3 #Third quadrant
|
||||||
|
else:
|
||||||
|
return 4 #Fourth quadrant
|
||||||
|
#By elimination. We could do another if but it's unnecessary
|
||||||
|
# elif B[0] < A[0] and B[1] > A[1]:
|
||||||
|
|
||||||
|
def trajectory(distance, n):
|
||||||
|
# Here we create a list of points. n is the amount we create
|
||||||
|
# (higher n results in greater precision)
|
||||||
|
# Not going to include it here - uses bezier interpolation and stuff to create
|
||||||
|
# the illusion of a ballistic trajectory with gravity (not a simple quadratic function)
|
||||||
|
#
|
||||||
|
return points
|
||||||
|
|
||||||
|
S = np.array([10,4]) #Silo position vector
|
||||||
|
T = np.array([5204,954]) #Target position vector
|
||||||
|
|
||||||
|
d = np.linalg.norm(T - S) #Get the distance: d = ((Tx-Sx)^2+(Ty-Sy)^2)^(0.5)
|
||||||
|
m = (T[1]-S[1])/(T[0]-S[0]) #Gradient of line between target and silo.
|
||||||
|
|
||||||
|
|
||||||
|
X = trajectory(d, 50) #50 is a constant for n. only affects trajectory precision
|
||||||
|
#X now contains a 'flat trajectory', a list of points which have the correct
|
||||||
|
#distance but the wrong angle and offset.
|
||||||
|
#It does not intersect with the target T.
|
||||||
|
|
||||||
|
def shear(m, X):
|
||||||
|
q = quad(S,T) #Silo and target is passed to the quadrant finding function.
|
||||||
|
#q is the quadrant
|
||||||
|
if q == 1 or q == 4:
|
||||||
|
return np.array([[1,0],
|
||||||
|
[m,1]]) #shear matrix.
|
||||||
|
else:
|
||||||
|
return np.array([[-1,0],
|
||||||
|
[m,-1]]) #shear matrix, but for quadrants 2 and 3 (negative x).
|
||||||
|
# AN easier way to do this would be to just compare S[0] > T[0]. Forget about the quadrant stuff.
|
||||||
|
# because we only need to know if it's in the negative or positive x.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SHEAR = shear(m, X) #we get the shear matrix, which the function returns
|
||||||
|
|
||||||
|
P_ = np.matmul(SHEAR, X[(0,-1),]) #first, take a slice of the array X to obtain the first (P1)
|
||||||
|
# and last (P2) points. Then multiply this new 2x2 matrix
|
||||||
|
# containing P1 and P2 by the shear matrix
|
||||||
|
# to get P_, which contains P'1 and P'2
|
||||||
|
|
||||||
|
d_ = np.linalg.norm(P_[1] - P_[0]) #adjusted distance
|
||||||
|
s = d/d_ #scale factor
|
||||||
|
|
||||||
|
X_ = s * np.matmul(SHEAR, X) + S # shear, then scale every point by s.
|
||||||
|
# Then add S, the silo position, to each position to yield the
|
||||||
|
# correct positions
|
||||||
|
# X_ (X') is now a numpy array containing the shifted position vectors
|
||||||
|
# that have been transformed through the 2.5d rotation.
|
||||||
|
# The trajectory will still look 'realistic', not curving to the side but still
|
||||||
|
# 'visually correct' and will be functionally correct in that it
|
||||||
|
# starts at silo S and ends at target T.
|
||||||
|
</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
BIN
math/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz
Normal file
BIN
math/7620f557a41f2bf40820e76ba1fd4d89a484859d.gz
Normal file
Binary file not shown.
|
@ -66,7 +66,7 @@
|
||||||
<hr>
|
<hr>
|
||||||
The polar form of a complex number is useful because of its properties.
|
The polar form of a complex number is useful because of its properties.
|
||||||
<center>
|
<center>
|
||||||
Simplify \(\boxed{\frac{(i+1)^{2020}}{(i-1)^{2020}}}\)
|
Simplify \(\boxed{\frac{(i+1)^{2020}}{(i-1)^{2020}}}\) (no calculator)
|
||||||
</center>
|
</center>
|
||||||
Some defining may be useful right now.
|
Some defining may be useful right now.
|
||||||
\begin{align}
|
\begin{align}
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
Let's try something harder.
|
Let's try something harder.
|
||||||
<p>
|
<p>
|
||||||
<center>
|
<center>
|
||||||
Express \(\boxed{\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{r\cdot\cis(\alpha)}\) <br>
|
Express \(\boxed{\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{r\cdot\cis(\alpha)}\) (no calculator)
|
||||||
</center>
|
</center>
|
||||||
What can we do? Firstly, we can expand the capital pi \(\Pi\) to reveal the terms.
|
What can we do? Firstly, we can expand the capital pi \(\Pi\) to reveal the terms.
|
||||||
\[\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) \times 2\cis\left(\frac{\pi}{2}\right)^2 \times 3\cis\left(\frac{\pi}{2}\right)^3 \times [\dots] \times 2020\cis\left(\frac{\pi}{2}\right)^{2020}\]
|
\[\prod_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) \times 2\cis\left(\frac{\pi}{2}\right)^2 \times 3\cis\left(\frac{\pi}{2}\right)^3 \times [\dots] \times 2020\cis\left(\frac{\pi}{2}\right)^{2020}\]
|
||||||
|
@ -141,19 +141,80 @@
|
||||||
Another math puzzle.
|
Another math puzzle.
|
||||||
<p>
|
<p>
|
||||||
<center>
|
<center>
|
||||||
Express \(\boxed{\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{\alpha + \beta i}\)
|
Express \(\boxed{\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right]}\) in the form \(\boxed{\alpha + \beta i}\) (3 marks, no calculator)
|
||||||
</center><br>
|
</center><br>
|
||||||
Hold up, haven't we done this already? No. This uses the summation formula. Also we want it in rectangular form - not polar form!<br>
|
Hold up, haven't we done this already? No. This uses the summation formula. Also we want it in rectangular form - not polar form!<br>
|
||||||
|
There are two mindsets to evaluate this expression: one which is 'local' and the other 'global'<br>
|
||||||
|
To be honest, I just skipped this question entirely. It was 3 marks and I was unprepared for this sort of question (I was close to a pattern, but the coefficients were not periodic and threw me off.)<br>
|
||||||
|
<b>Method one: Local</b><br>
|
||||||
|
A 'local' approach aims to identify how the function or expression behaves at a small or local level.<br>
|
||||||
|
Let's define the part within the summation as \(f(x)\)
|
||||||
|
\[\text{Define: } f(x) = n\cdot\cis\left(\frac{\pi}{2}\right)^n\]
|
||||||
|
Let's see how the function behaves for a *few* values of \(x\).<br>
|
||||||
|
We're trying to see how the function within the summation of the original expression behaves at a local level, so we don't test all 2020 terms. The goal is to find a pattern that applies for the remaining terms.
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
f(1) &= 1\cdot\cis\left(\frac{\pi}{2}\right)^1 \\
|
||||||
|
f(2) &= 2\cdot\cis\left(\frac{\pi}{2}\right)^2 \\
|
||||||
|
f(3) &= 3\cdot\cis\left(\frac{\pi}{2}\right)^3 \\
|
||||||
|
f(4) &= 4\cdot\cis\left(\frac{\pi}{2}\right)^4 \\
|
||||||
|
f(5) &= 5\cdot\cis\left(\frac{\pi}{2}\right)^5 \\
|
||||||
|
f(6) &= 6\cdot\cis\left(\frac{\pi}{2}\right)^6 \\
|
||||||
|
f(7) &= 7\cdot\cis\left(\frac{\pi}{2}\right)^7 \\
|
||||||
|
f(8) &= 8\cdot\cis\left(\frac{\pi}{2}\right)^8 \\
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
Let's apply De Moivre's theorem.
|
||||||
|
|
||||||
|
\begin{alignat}{2}
|
||||||
|
f(1) &= 1\cdot\cis\left(\frac{\pi}{2}\right) &&= \cis\left(\frac{\pi}{2}\right) \\
|
||||||
|
f(2) &= 2\cdot\cis\left(\frac{2\pi}{2}\right) &&= 2\cdot\cis\left(\pi\right) \\
|
||||||
|
f(3) &= 3\cdot\cis\left(\frac{3\pi}{2}\right) &&= 3\cdot\cis\left(\frac{3\pi}{2}\right)\\
|
||||||
|
f(4) &= 4\cdot\cis\left(\frac{4\pi}{2}\right) &&= 4\cdot\cis\left(2\pi\right) \\
|
||||||
|
f(5) &= 5\cdot\cis\left(\frac{5\pi}{2}\right) &&= 5\cdot\cis\left(\frac{\pi}{2}\right) \\
|
||||||
|
f(6) &= 6\cdot\cis\left(\frac{6\pi}{2}\right) &&= 6\cdot\cis\left(\pi\right) \\
|
||||||
|
f(7) &= 7\cdot\cis\left(\frac{7\pi}{2}\right) &&= 7\cdot\cis\left(\frac{3\pi}{2}\right) \\
|
||||||
|
f(8) &= 8\cdot\cis\left(\frac{8\pi}{2}\right) &&= 8\cdot\cis\left(2\pi\right) \\
|
||||||
|
\end{alignat}
|
||||||
|
|
||||||
|
At this point we seem to be close to a pattern (periodic nature of \(\cis\)), but it doesn't quite seem like one due to the coefficients which are not repeating.<br>
|
||||||
|
If we try summing by the pattern that exists (the \(\cis\)), we may see a pattern emerge
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\sum_{n=1}^{4}\left[f(n)\right] &= f(1)+f(2)+f(3)+f(4) \\
|
||||||
|
&= i -2 -3i +4 \\
|
||||||
|
&= 2 - 2i \\
|
||||||
|
\sum_{n=5}^{8}\left[f(n)\right] &= f(5)+f(6)+f(7)+f(8) \\
|
||||||
|
&= 5i -6 -7i +8 \\
|
||||||
|
&= 2 - 2i
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
In fact we do see a pattern - this sort of local behavior applies for the whole 2020 terms.<br>
|
||||||
|
|
||||||
|
\begin{align}
|
||||||
|
\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= \sum_{n=1}^{4}\left[f(n)\right] + \sum_{n=5}^{8}\left[f(n)\right] + [\dots] + \sum_{n=2015}^{2020}\left[f(n)\right] \\
|
||||||
|
&= (2-2i) + (2-2i) + [\dots] + (2-2i) \\
|
||||||
|
&= \frac{2020}{4}\cdot(2-2i) \\
|
||||||
|
&= 1010 - 1010i
|
||||||
|
\end{align}
|
||||||
|
|
||||||
|
Hopefully this explains what I mean by 'local' : a bit of an odd term but it differentiates this line of thinking from the next one I will show.<br><br>
|
||||||
|
The main downside to this mindset is that you may end up wasting time by testing to find a pattern. For a 3 mark question, I didn't even consider using this method (although this was the intended method, from what I can see)<br>
|
||||||
|
Compared to the global method it has some benefits. In this case it avoids the use of a complicated summation formula. More generally, it also requires smaller calculations as we're not looking at the large behavior - this can minimize mistakes.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<b>Method two: Global</b><br>
|
||||||
|
The 'global' approach observes how the function or expression behaves as a whole.<br>
|
||||||
Instantly, let's unpack the summation then, apply De Moivre's theorem.
|
Instantly, let's unpack the summation then, apply De Moivre's theorem.
|
||||||
\begin{align}
|
\begin{align}
|
||||||
\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\right)^2 + 3\cis\left(\frac{\pi}{2}\right)^3 + 4\cis\left(\frac{\pi}{2}\right)^4 + 5\cis\left(\frac{\pi}{2}\right)^5 + 6\cis\left(\frac{\pi}{2}\right)^6 + [\dots] + 2020\cis\left(\frac{\pi}{2}\right)^{2020} \\
|
\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\right)^2 + 3\cis\left(\frac{\pi}{2}\right)^3 + 4\cis\left(\frac{\pi}{2}\right)^4 + 5\cis\left(\frac{\pi}{2}\right)^5 + 6\cis\left(\frac{\pi}{2}\right)^6 + [\dots] + 2020\cis\left(\frac{\pi}{2}\right)^{2020} \\
|
||||||
&= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\cdot 2\right) + 3\cis\left(\frac{\pi}{2}\cdot 3\right) + 4\cis\left(\frac{\pi}{2}\cdot 4\right) + 5\cis\left(\frac{\pi}{2}\cdot 5\right) + 6\cis\left(\frac{\pi}{2}\cdot 6\right) + [\dots] + 2020\cis\left(\frac{\pi}{2}\cdot 2020\right)
|
&= \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\frac{\pi}{2}\cdot 2\right) + 3\cis\left(\frac{\pi}{2}\cdot 3\right) + 4\cis\left(\frac{\pi}{2}\cdot 4\right) + 5\cis\left(\frac{\pi}{2}\cdot 5\right) + 6\cis\left(\frac{\pi}{2}\cdot 6\right) + [\dots] + 2020\cis\left(\frac{\pi}{2}\cdot 2020\right)
|
||||||
\end{align}
|
\end{align}
|
||||||
What we have here is essentially a series of rotating vectors. So that means we can expect to simplify quite a few of the cis terms, as they repeat periodically.<br>
|
What we have here is essentially a series of rotating vectors. So that means we can expect to simplify quite a few of the cis terms, as they repeat periodically.<br>
|
||||||
For example, \(\cis\left(\frac{\pi}{2}\right)=\cis\left(\frac{5\pi}{2}\right)=\cis\left(\frac{9\pi}{2}\right)=[...]=\cis\left(\frac{\pi}{2}+k\cdot 2\pi\right)\) for integer \(k\)
|
For example, \(\cis\left(\frac{\pi}{2}\right)=\cis\left(\frac{5\pi}{2}\right)=\cis\left(\frac{9\pi}{2}\right)=[\dots]=\cis\left(\frac{\pi}{2}+k\cdot 2\pi\right)\) for integer \(k\)
|
||||||
\[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\pi\right) + 3\cis\left(\frac{3\pi}{2}\right) + 4\cis\left(2\pi\right) + 5\cis\left(\frac{\pi}{2}\right) + 6\cis\left(\pi\right) + [\dots] + 2020\cis\left(2\pi\right)\]
|
\[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = \cis\left(\frac{\pi}{2}\right) + 2\cis\left(\pi\right) + 3\cis\left(\frac{3\pi}{2}\right) + 4\cis\left(2\pi\right) + 5\cis\left(\frac{\pi}{2}\right) + 6\cis\left(\pi\right) + [\dots] + 2020\cis\left(2\pi\right)\]
|
||||||
Alright, let's collect the cis terms according to their (simplified) angle.
|
Alright, let's collect the cis terms according to their (simplified) angle.
|
||||||
\[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = (1+5+9+13+[...])\times\cis\left(\frac{\pi}{2}\right) + (2+6+10+14+[...])\times\cis\left(\pi\right) + (3+7+11+15+[...])\times\cis\left(\frac{3\pi}{2}\right) + (4+8+16+20+[...])\times\cis\left(2\pi\right)\]
|
\[\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] = (1+5+9+13+[\dots])\times\cis\left(\frac{\pi}{2}\right) + (2+6+10+14+[\dots])\times\cis\left(\pi\right) + (3+7+11+15+[\dots])\times\cis\left(\frac{3\pi}{2}\right) + (4+8+16+20+[\dots])\times\cis\left(2\pi\right)\]
|
||||||
We need to use the arithmetic progression sum formula, because we have a common difference \(d\) of 4 between each number, not 1 like last time. Also for our terms, we have different starting values, \(a_0\)
|
We need to use the arithmetic progression sum formula, because we have a common difference \(d\) of 4 between each number, not 1 like last time. Also for our terms, we have different starting values, \(a_0\)
|
||||||
\[\boxed{\sum_{k=1}^{n-1}\left[a_0+k\cdot d\right] = \frac{n}{2}\left[(n-1)\cdot d+2a_0\right]}\]
|
\[\boxed{\sum_{k=1}^{n-1}\left[a_0+k\cdot d\right] = \frac{n}{2}\left[(n-1)\cdot d+2a_0\right]}\]
|
||||||
Now, we have \(\frac{2020}{4}\) terms for each unique angle for \(\cis\) because 2020 is divisible by 4 (The number of \(\cis\) with unique angles) evenly. In other scenarios this may not be the case and \(n\) may vary for each sum.<br>
|
Now, we have \(\frac{2020}{4}\) terms for each unique angle for \(\cis\) because 2020 is divisible by 4 (The number of \(\cis\) with unique angles) evenly. In other scenarios this may not be the case and \(n\) may vary for each sum.<br>
|
||||||
|
@ -165,7 +226,12 @@
|
||||||
&= 511060 - 510050 + (509545 - 510555)i\\
|
&= 511060 - 510050 + (509545 - 510555)i\\
|
||||||
\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= 1010 - 1010i
|
\sum_{n=1}^{2020}\left[n\cdot\cis\left(\frac{\pi}{2}\right)^n\right] &= 1010 - 1010i
|
||||||
\end{align}
|
\end{align}
|
||||||
And there we have it!
|
And there we have it!<br><br>
|
||||||
|
The downside to this method is that you end up needing to handle large numbers - which also wastes time and increases chances of making a mistake.<br>
|
||||||
|
For this particular question, there is also the downside of requiring previous year content (the AP formula), which I certainly did not remember.<br>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
To be completely honest, this question should be worth more than just three marks. In the exam, I decided that this was not worth my time.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<a class="link" style="left:1%; bottom: 1%;" href="https://npc-strider.github.io/maths">🔗 Back to MATHS home page</a><br>
|
<a class="link" style="left:1%; bottom: 1%;" href="https://npc-strider.github.io/maths">🔗 Back to MATHS home page</a><br>
|
||||||
|
|
BIN
math/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm
Normal file
BIN
math/ef253ef29e2f057334f77ead7f06ed8f22607d38.wasm
Normal file
Binary file not shown.
|
@ -25,12 +25,18 @@
|
||||||
<h1>Hello!</h1>
|
<h1>Hello!</h1>
|
||||||
Welcome to my math page.<br>
|
Welcome to my math page.<br>
|
||||||
The content here will apply throughout the universe, because as far as I know, logic is the same everywhere. \(1+1\) does equal \(2\) whether you are in WA or on Mars. <br>
|
The content here will apply throughout the universe, because as far as I know, logic is the same everywhere. \(1+1\) does equal \(2\) whether you are in WA or on Mars. <br>
|
||||||
However, do take note that these ramblings are influenced by WACE curriculum. For instance, we don't get taught Euler's formula \(e^{i\theta}=\cos(\theta)+i \sin(\theta)\). Instead, we get taught the rarer \(\cis(\theta)=\cos(\theta)+i \sin(\theta)\)<br>
|
However, do take note that these ramblings are influenced by WACE curriculum. For instance, we don't get taught Euler's formula \(e^{i\theta}=\cos(\theta)+i \sin(\theta)\). Instead, we get taught the rarer \(\cis(\theta)=\cos(\theta)+i \sin(\theta)\)<br><br>
|
||||||
Also note that I'm writing these because I <b>want</b> to, not because I have to. So these pages will probably never cover the whole curriculum and they will probably be incomplete, only showcasing the most interesting or unique problems. Therefore, they are <b>not a textbook</b>.<br><br>
|
Also note that I'm writing these because I <b>want</b> to, not because I have to. So these pages will probably never cover the whole curriculum and they will probably be incomplete, only showcasing the most interesting or unique problems. Therefore, they are <b>not a textbook</b>.<br><br>
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
Here is a list of pages:<br>
|
Here is a list of pages:<br>
|
||||||
<a href="https://npc-strider.github.io/math/de moivre theorem.html">Polar form of complex number, De Moivre's theorem</a>
|
<b>Year 12</b><br>
|
||||||
|
<a href="https://npc-strider.github.io/math/de moivre theorem.html">Polar form of complex number, De Moivre's theorem</a> <br>
|
||||||
|
<b>Year 11</b><br>
|
||||||
|
<a href="https://npc-strider.github.io/math/2.5d rotations.html">'2.5d' rotations using matrix transformations ⚠</a>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
*⚠: advanced content, not really useful here
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
22316
math/tikzjax.js
Normal file
22316
math/tikzjax.js
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user