<p>I think the confusion arises precisely because of the computer graphics context. The notions of basis, coordinate system, axes, and so on have mathematical definitions, and what you see in graphics is just an application of those concepts with extra jargon attached on top.</p>
<p>The reply to the first two points is fairly lengthy, since I do not know how to rigorously explain this without resorting to linear algebra. However once this is understood the rest comes almost for free.</p>
<hr />
<p><strong>1. Axis, Basis Vectors, Coordinate System</strong></p>
<p>The formal definition of an axis is an oriented line: <a href="https://en.wikipedia.org/wiki/Orientation_(vector_space)#On_a_line" rel="nofollow noreferrer">&quot;In real coordinate space, an oriented line is also known as an axis.&quot;</a> Unlike a basis vector it does not prescribe lengths. On the other hand it doesn't necessarily pass through the origin. However, in graphics I believe that it is sometimes used interchangeably with the basis vectors when those are positioned at the origin of your coordinate system. This is likely because the origin of the coordinate system <span class="math-container">$\vec{a}_0$</span> along with a basis vector <span class="math-container">$\vec{a}_i$</span> uniquely determines an oriented line as <span class="math-container">$\vec{l}_i(t) = \vec{a}_0 + t\vec{a}_i$</span>, where the positive orientation is along <span class="math-container">$\vec{a}_i$</span> and the opposite is along <span class="math-container">$-\vec{a}_i$</span>. Note that formally the converse is not true despite the interchangeable usage in graphics, i.e., an oriented line does not uniquely determine a basis vector or an origin.</p>
<hr />
<p><strong>2.1. Basis: Mathematical Definition</strong></p>
<p>A basis <span class="math-container">$A$</span> (in a finite-dimensional space) is just an <span class="math-container">$n$</span>-tuple of linearly independent vectors
<span class="math-container">$$A = \begin{bmatrix} | &amp; &amp; | \\ \vec{a}_1 &amp; \ldots &amp; \vec{a}_n \\ | &amp; &amp; | \end{bmatrix}\in V^{1\times n},$$</span>
that spans the vector space <span class="math-container">$(V,\mathbb{F},+,\cdot)$</span>. If <span class="math-container">$V=\mathbb{R}^n, \mathbb{F} = \mathbb{R},$</span> then the above is an invertible matrix from <span class="math-container">$\mathbb{R}^{n\times n}$</span>. It gives you unique coordinates <span class="math-container">$[\vec{v}]_A\in\mathbb{R}^{n\times 1}$</span> for any vector <span class="math-container">$\vec{v}\in V$</span>:
<span class="math-container">$$\vec{v} = \sum_{i=1}^n [\vec{v}]_A^i \vec{a}_i 
=\begin{bmatrix} | &amp; &amp; | \\ \vec{a}_1 &amp; \ldots &amp; \vec{a}_n \\ | &amp; &amp; | \end{bmatrix} \begin{bmatrix}
[\vec{v}]_A^1 \\ \vdots \\ [\vec{v}]_A^n
\end{bmatrix} = A [\vec{v}]_A.$$</span>
A different basis <span class="math-container">$B$</span> for the same space may give you different coordinates <span class="math-container">$[\vec{v}]_B\ne[\vec{v}]_A$</span> for the same vector <span class="math-container">$\vec{v}$</span>:
<span class="math-container">$$B[\vec{v}]_B = \sum_{i=1}^n [\vec{v}]^i_B \vec{b}_i = \vec{v} = \sum_{i=1}^n [\vec{v}]_A^i \vec{a}_i = A [\vec{v}]_A.$$</span>
So the only thing a basis influences are coordinates.</p>
<p><strong>2.1a. A Note on the Necessity for Abstraction</strong></p>
<p>A natural question is what is the difference between vectors and elements of <span class="math-container">$\mathbb{R}^n$</span>. The thing is that a vector space can be more abstract, e.g., <span class="math-container">$V = \{p:\mathbb{R}\to\mathbb{R}\,|\, \sum_{j=0}^{n-1} c_j t^n, \,c_j\in\mathbb{R}\}$</span>, with the standard function addition and real number multiplication, is the vector space of real polynomials of at most degree <span class="math-container">$(n-1)$</span>. Here vectors <span class="math-container">$\vec{v}\in V$</span> are polynomial functions. However the idea of coordinates remains virtually the same:</p>
<p><span class="math-container">$$\vec{v} = \sum_{i=1}^n [\vec{v}]_A^i \vec{a}_i = A [\vec{v}]_A.$$</span></p>
<p>The only thing that changes is that <span class="math-container">$A$</span> is not an <span class="math-container">$n\times n$</span> matrix anymore, but it is instead a matrix from <span class="math-container">$V^{1\times n}$</span> where the elements are the polynomial basis functions, e.g. <span class="math-container">$A = \begin{bmatrix} 1 &amp; t &amp; t^2 &amp; \ldots &amp; t^{n-1}\end{bmatrix}$</span>, then the coordinates are the polynomial coefficients in the monomial basis. So abstraction allows for more generality, where the above definitions do not only apply to arrows in Euclidean space.</p>
<p><strong>2.2. Coordinate System</strong></p>
<p>If you also add an origin <span class="math-container">$\vec{a}_0$</span> then you end up with a coordinate system
<span class="math-container">$$A_0 = \begin{bmatrix} | &amp; | &amp; &amp; | \\ \vec{a}_0 &amp; \vec{a}_1 &amp; \ldots &amp; \vec{a}_n \\ | &amp; | &amp; &amp; | \end{bmatrix}\in V^{1\times (1+n)}.$$</span>
The coordinates <span class="math-container">$[\vec{v}]_{A_0}$</span> of any vector <span class="math-container">$\vec{v}$</span> are related to its coordinates <span class="math-container">$[\vec{v}]_{A}$</span> in a simple manner:
<span class="math-container">$$\vec{v} = \vec{a}_0 + \sum_{i=1}^n[\vec{v}]^i_{A_0}\vec{a}_i \implies \vec{v}- \vec{a}_0 = \sum_{i=1}^n[\vec{v}]^i_{A_0}\vec{a}_i = \sum_{i=1}^n[\vec{v}-\vec{a}_0]^i_{A}\vec{a}_i \implies [\vec{v}]_{A_0} = [\vec{v}]_A-[\vec{a}_0]_A.$$</span>
Thus the coordinates <span class="math-container">$[\vec{v}]_{A_0}$</span> are just <span class="math-container">$[\vec{v}]_A$</span> with a shift by the negated coordinates <span class="math-container">$-[\vec{a}_0]_A$</span> of <span class="math-container">$\vec{a}_0$</span> in <span class="math-container">$A$</span>.</p>
<p><strong>2.3. Basis Coordinates vs Coordinate System Coordinates</strong></p>
<p>In graphics you typically work with <span class="math-container">$[\vec{v}]_{A_0}$</span> whenever a coordinate system is given. A compact notation similar to <span class="math-container">$\vec{v} = A[\vec{v}]_A$</span> is:</p>
<p><span class="math-container">$$\vec{v} = \vec{a}_0 + \sum_{i=1}^n [\vec{v}]_{A_0}^i\vec{a}_i = 
\begin{bmatrix}
| &amp; | &amp; &amp; | \\ \vec{a}_0 &amp; \vec{a}_1 &amp; \ldots &amp; \vec{a}_n \\ | &amp; | &amp; &amp; | 
\end{bmatrix}\begin{bmatrix} 1 \\ [\vec{v}]^1_{A_0} \\ \vdots \\ [\vec{v}]^n_{A_0}\end{bmatrix} = A_0 \langle\vec{v}\rangle_{A_0}, \quad
\langle\vec{v}\rangle_{A_0} := \begin{bmatrix} 1 \\ [\vec{v}]_{A_0} \end{bmatrix}.
$$</span></p>
<p>For lack of better notation I have used <span class="math-container">$\langle \vec{v} \rangle_{A_0}$</span> for the extension of the coordinates <span class="math-container">$[\vec{v}]_{A_0}$</span> with a <span class="math-container">$1$</span>, note however that this is not standard notation. The above is similar to what is done in CG for homogeneous coordinates, although I put the <span class="math-container">$1$</span> in the <span class="math-container">$0$</span>-th slot, while in CG they like to put it in the <span class="math-container">$(n+1)$</span>-st slot. On the other hand you cannot put an arbitrary non-zero number instead of the <span class="math-container">$1$</span> here, as that would mess up <span class="math-container">$\vec{v}$</span>, So the above is just for conciseness of notation. You could put a zero, however, if you use <span class="math-container">$[\vec{v}]_A$</span> which results in:
<span class="math-container">$$\vec{v} = A_0\langle \vec{v}\rangle_{A} = A[\vec{v}]_A, \quad \langle \vec{v}\rangle_A := \begin{bmatrix} 0 \\ [\vec{v}]_A\end{bmatrix}.$$</span></p>
<p>You will notice that I defined <span class="math-container">$\langle\cdot\rangle$</span> in two ways, whenever it was w.r.t. <span class="math-container">$A$</span> I put a zero, and when it was w.r.t. <span class="math-container">$A_0$</span> I put a <span class="math-container">$1$</span>. This allows you to distinguish whether a vector is in <span class="math-container">$A$</span> or <span class="math-container">$A_0$</span> just by looking at &quot;the homogeneous coordinate&quot;. In CG typically coordinates w.r.t. <span class="math-container">$A$</span> (i.e. using a zero) are used when working with &quot;direction vectors&quot; that should not be affected by translations, while coordinates w.r.t. <span class="math-container">$A_0$</span> (i.e. using a one) are used to when working with points that should be affected by translations.</p>
<p><strong>2.3a Coordinate System Coordinates</strong></p>
<p>From the previous we know that if we have a point <span class="math-container">$\vec{p}$</span> we would typically store its coordinates <span class="math-container">$[\vec{p}]_{A_0}$</span> w.r.t. <span class="math-container">$A_0$</span>, while if we have a &quot;direction vector&quot; <span class="math-container">$\vec{d}$</span> we would typically store its coordinates <span class="math-container">$[\vec{d}]_{A}$</span> w.r.t. <span class="math-container">$A$</span>, with the reconstruction rules:
<span class="math-container">$$
\vec{p} = A_0\langle \vec{p}\rangle_{A_0}, \quad \vec{d} = A_0\langle \vec{d}\rangle_{A}
$$</span></p>
<p>In the next section I will need reconstruction rules for the coordinate systems from their coordinaates, so I generalise the above to this setting. A coordinate system itself is a collection of <span class="math-container">$n+1$</span> vectors, where we treat the zero-th as a point, and the rest as &quot;directional vectors&quot;, in other words <span class="math-container">$\vec{a}_0$</span> is expressed in <span class="math-container">$A_0$</span> and <span class="math-container">$\vec{a}_i$</span> are expressed in <span class="math-container">$A$</span> for <span class="math-container">$1\leq i\leq n$</span>. For convenience and to reflect the above I generalize the notation <span class="math-container">$\langle\cdot\rangle$</span> to the coordinates of <span class="math-container">$B_0$</span> as follows:
<span class="math-container">$$\langle B_0\rangle_{A_0} = \begin{bmatrix} 
| &amp; | &amp; &amp; | \\
\langle \vec{b}_0 \rangle_{A_0} &amp; \langle \vec{b}_1\rangle_A &amp; \ldots &amp; \langle \vec{b}_n\rangle_A \\ | &amp; | &amp; &amp; |\end{bmatrix} = 
\begin{bmatrix}
1 &amp; 0 &amp; \ldots &amp; 0 \\
| &amp; | &amp; &amp; | \\
[\vec{b}_0]_{A_0} &amp; [\vec{b}_1]_{A} &amp; \ldots &amp; [\vec{b}_n]_{A} \\
| &amp; | &amp; &amp; | \end{bmatrix}.
$$</span>
Note that this is how a typical transformation matrix looks like up to switching the first and last column and rows. In the above the translation factor is in the first column and the basis transformation is in the lower right part.</p>
<p>Now you can reconstruct <span class="math-container">$B_0$</span> as follows:</p>
<p><span class="math-container">\begin{align}B_0 &amp;= A_0\langle B_0\rangle_{A_0} 
\\ 
\begin{bmatrix} | &amp; | &amp; &amp; | \\ \vec{b}_0 &amp; \vec{b}_1 &amp; \ldots &amp; \vec{b}_n \\ | &amp; | &amp; &amp; | \end{bmatrix} &amp;= \begin{bmatrix} | &amp; | &amp; &amp; | \\ \vec{a}_0 &amp; \vec{a}_1 &amp; \ldots &amp; \vec{a}_n \\ | &amp; | &amp; &amp; | \end{bmatrix}\begin{bmatrix} | &amp; | &amp; &amp; | \\ \langle\vec{b}_0\rangle_{A_0} &amp; \langle \vec{b}_1\rangle_{A} &amp; \ldots&amp; \langle \vec{b}_n\rangle_{A} \\ | &amp; | &amp; &amp; |\end{bmatrix}.
\end{align}</span></p>
<p><strong>2.4. &quot;Nested&quot; Coordinate Systems</strong></p>
<p>Now suppose I have <span class="math-container">$m+1$</span> coordinate system <span class="math-container">$C_0,\ldots,C_m$</span> and that I store the coordinates <span class="math-container">$[C_{k+1}]_{C_k}$</span> of <span class="math-container">$C_{k+1}$</span> expressed in the basis <span class="math-container">$C_k$</span>, i.e., <span class="math-container">$C_{k+1} = C_k \langle C_{k+1}\rangle_{C_k}$</span>. Then in graphics <span class="math-container">$C_{k+1}$</span> is termed a child of <span class="math-container">$C_k$</span> and <span class="math-container">$C_k$</span> is termed the parent of <span class="math-container">$C_{k+1}$</span>. The nesting becomes obvious if one expands <span class="math-container">$C_{k+1} = C_k \langle C_{k+1}\rangle _{C_k}$</span> as follows:
<span class="math-container">$$C_{k+1} = C_k \langle C_{k+1}\rangle_{C_k} = C_{k-1} \langle C_{k}\rangle_{C_{k-1}}\langle C_{k+1}\rangle_{C_k}
= \ldots = C_0 \langle C_1\rangle_{C_0} \langle C_2\rangle_{C_1} \ldots \langle C_{k+1}\rangle_{C_k} = C_0 \langle C_{k+1}\rangle_{C_0}.$$</span></p>
<p>Now if you have the coordinates <span class="math-container">$[\vec{v}]_{C_m}$</span> of a vector <span class="math-container">$\vec{v}$</span> w.r.t. <span class="math-container">$C_m$</span> then you can reconstruct the vector as:</p>
<p><span class="math-container">$$\vec{v} = C_m \langle\vec{v}\rangle_{C_m} = C_0\langle C_1\rangle_{C_0}\ldots \langle C_m\rangle_{C_{m-1}} \langle \vec{v}\rangle_{C_m} = C_0 \langle \vec{v}\rangle_{C_0}.$$</span></p>
<p>The coordinate systems themselves are not nested as that wouldn't make sense. It's the coordinate representations of those that are nested, and you see above that given the coordinate <span class="math-container">$[\vec{v}]_{C_m}$</span> you can use this to get its coordinates <span class="math-container">$[\vec{v}]_{C_k}$</span> by taking <span class="math-container">$m-k$</span> steps up the chain.</p>
<p><strong>2.4a. Examples</strong></p>
<p>A typical setting would have <span class="math-container">$C_0$</span> as the world space coordinate system and <span class="math-container">$C_1$</span> as model space, <span class="math-container">$[C_1]_{C_0}$</span> being the coordinates of <span class="math-container">$C_1$</span> w.r.t. <span class="math-container">$C_0$</span>. In fact the model to world matrix <span class="math-container">$P_{M\to W}$</span> in homogeneous coordinates is then:
<span class="math-container">$$P_{M\to W} = \begin{bmatrix} | &amp; &amp; | &amp; | \\ [\vec{c}_{1,1}]_{C_0} &amp; \ldots &amp; [\vec{c}_{1,n}]_{C_0} &amp; [\vec{c}_{1,0}]_{C_0} \\ | &amp; &amp; | &amp; | \\ 0 &amp; \ldots &amp; 0 &amp; 1\end{bmatrix},$$</span>
which is the same as <span class="math-container">$\langle C_1\rangle_{C_0}$</span> up to a switch of the first and last column and rows.</p>
<p>A more complex example would have the world space coordinate system <span class="math-container">$W$</span> as well as the camera coordinate system's coordinates <span class="math-container">$[C]_W$</span> expressed in world space, as well as some model's coordinate system's coordinates <span class="math-container">$[M]_W$</span> expressed in world space. Typically here you have <span class="math-container">$[\vec{v}]_M$</span> and you want to find <span class="math-container">$[\vec{v}]_C$</span>. Then you can use</p>
<p><span class="math-container">\begin{align}
\vec{v} &amp;= C\langle \vec{v}\rangle_C = W\langle C\rangle_W\langle\vec{v}\rangle_C \\
\vec{v} &amp;= M\langle\vec{v}\rangle_M = W\langle M\rangle_W\langle \vec{v}\rangle_M.
\end{align}</span></p>
<p>Since both sides are equal to the same thing we can just identify the coordinates:
<span class="math-container">$$
\langle C\rangle_W\langle\vec{v}\rangle_C =\langle M\rangle_W\langle \vec{v}\rangle_M \implies \langle\vec{v}\rangle_C = \langle C\rangle_W^{-1}\langle M\rangle_W\langle \vec{v}\rangle_M.
$$</span></p>
<hr />
<p><strong>3. Child Coordinate System Transformation</strong></p>
<p>Suppose you have the coordinates <span class="math-container">$[C_0]_{P_0}$</span> of a &quot;child&quot; coordinate system <span class="math-container">$C_0$</span> expressed in the coordinate system <span class="math-container">$P_0$</span>. And consider the transformation matrix:</p>
<p><span class="math-container">$$T = \begin{bmatrix} 1 &amp; \vec{0}^T \\ \vec{t} &amp; M \end{bmatrix},$$</span></p>
<p>that encodes a translation <span class="math-container">$\vec{t}$</span> and a linear transformation <span class="math-container">$M$</span>. The results depend on what side you multiply with <span class="math-container">$\langle C_0\rangle_{P_0}$</span>:</p>
<p><span class="math-container">\begin{align}
T\langle C_0\rangle_{P_0} &amp;= \begin{bmatrix} 1 &amp; \vec{0}^T \\ \vec{t} &amp; M \end{bmatrix}\begin{bmatrix} 1 &amp; \vec{0}^T \\ \vec{c}_0 &amp; C \end{bmatrix} =
\begin{bmatrix}
1 &amp; \vec{0}^T \\ 
\vec{t} + M\vec{c}_0 &amp; MC
\end{bmatrix} 
\\
\langle C_0\rangle_{P_0}T &amp;= \begin{bmatrix} 1 &amp; \vec{0}^T \\ \vec{c}_0 &amp; C \end{bmatrix}\begin{bmatrix} 1 &amp; \vec{0}^T \\ \vec{t} &amp; M \end{bmatrix} =
\begin{bmatrix}
1 &amp; \vec{0}^T \\ 
\vec{c}_0 + C\vec{t} &amp; CM
\end{bmatrix}.
\end{align}</span></p>
<p>Suppose that you apply a translation only, i.e., <span class="math-container">$M=I_n$</span>. Then the first translates w.r.t. the basis of the coordinate system <span class="math-container">$P$</span>, while the latter translates w.r.t. the basis of the coordinate system <span class="math-container">$C$</span>. That is you can regard this as <span class="math-container">$\vec{t}\equiv[\vec{t}]_P$</span> in the first case and <span class="math-container">$\vec{t}\equiv[\vec{t}]_C$</span> in the second. Similarly, suppose that <span class="math-container">$\vec{t} = \vec{0}$</span> and <span class="math-container">$M$</span> is a rotation matrix. Then the first rotates <span class="math-container">$\vec{c}_0$</span> and <span class="math-container">$C$</span> around the origin of <span class="math-container">$P$</span>, i.e., you can interpret <span class="math-container">$M\equiv [M]_P$</span> in the first case. In the second case the rotation happens around <span class="math-container">$\vec{c}_0$</span> and w.r.t. the basis <span class="math-container">$C$</span>, i.e. <span class="math-container">$M\equiv [M]_{C}$</span>.</p>
<hr />
<p><strong>4. Coordinates Representation</strong></p>
<p>The examples from 2.4a with model to world and model to camera space should have answered this question.</p>
<hr />
<p><strong>5. Coordinates w.r.t. the System Itself</strong></p>
<p>You know that <span class="math-container">$B_0 = A_0\langle B_0\rangle_{A_0}$</span>, now set <span class="math-container">$B_0=A_0$</span>, then <span class="math-container">$A_0 = A_0\langle A_0\rangle_{A_0}$</span>, and the matrix must necessarily be the identity. So yes, the coordinates of the basis vectors w.r.t. the basis itself are the canonical vectors. Similarly the coordinates of the origin with respect to the system itself is zero since <span class="math-container">$$[\vec{a}_0]_{A_0} = [\vec{a}_0]_A - [\vec{a}_0]_A = \vec{0}.$$</span></p>
<hr />
<p><strong>6. Coordinates w.r.t. Some Other System</strong></p>
<p>Suppose <span class="math-container">$[C_0]_{P_0}$</span> is given. It is the identity matrix only if <span class="math-container">$C_0=P_0$</span>. If <span class="math-container">$\vec{c}_0\ne\vec{p}_0$</span> but <span class="math-container">$C=P$</span> then the origin coordinates <span class="math-container">$[\vec{c}_0]_{P_0}$</span> are non-zero, but the rest is the identity. Vice versa if <span class="math-container">$\vec{c}_0 =\vec{p}_0$</span> but <span class="math-container">$C\ne P$</span> then the origin coordinates <span class="math-container">$[\vec{c}_0]_{P_0}$</span> are zero, but the rest is arbitrary.</p>
<hr />
<p><strong>7. What does the &quot;Parent&quot; Coordinate System Know About the &quot;Child&quot; System</strong></p>
<p>If <span class="math-container">$[C_0]_{P_0}$</span> is available the parent <span class="math-container">$P_0$</span> knows everything about the child, and it can reconstruct it as <span class="math-container">$C_0 = P_0\langle C_0\rangle_{P_0}$</span>.</p>
<hr />
<p><strong>8. Transformations Applicable to the Origin and Basis</strong></p>
<p>The basis is not affected by translational transformations, i.e. it accepts only linear transformations similar to &quot;direction vectors&quot;. The origin can be transformed with any affine trasformation (translation + linear transformation), similar to how points transform. Refer to section 3.</p>
<hr />
<p><strong>9. Metrics in Different Systems</strong></p>
<p>If you interpret everything as <a href="https://en.wikipedia.org/wiki/Active_and_passive_transformation" rel="nofollow noreferrer">passive transformations</a> then necessarily the inner product and thus norm are preserved because the vectors themselves do not change. The trick is that whenever you transform a coordinate system with some matrix <span class="math-container">$T$</span> you are also supposed to transform its coordinates with the opposite transformation in order for the coordinates to remain correct.</p>
<p>Suppose you have the coordinate system <span class="math-container">$A_0$</span> and the &quot;direction vectors&quot; <span class="math-container">$\vec{u}, \vec{v}$</span>, then you can compute their coordinates <span class="math-container">$[\vec{u}]_{A},[\vec{v}]_{A}$</span> and you have that <span class="math-container">$\vec{u} = A[\vec{u}]_{A}$</span> and <span class="math-container">$\vec{v} = A[\vec{v}]_{A_0}$</span>. You can compute the inner product <span class="math-container">$\langle \vec{u},\vec{v}\rangle$</span> of the vectors as follows:</p>
<p><span class="math-container">\begin{align}
\langle\vec{u}, \vec{v}\rangle &amp;= \langle A[\vec{u}]_{A},  A[\vec{v}]_{A}\rangle = 
[\vec{u}]_A^T \begin{bmatrix} \langle \vec{a}_1, \vec{a}_1\rangle &amp; \ldots &amp; \langle \vec{a}_1,\vec{a}_n \rangle \\ \vdots &amp; &amp; \vdots \\ \langle \vec{a}_n, \vec{a}_1\rangle &amp; \ldots &amp; \langle \vec{a}_n, \vec{a}_n\rangle\end{bmatrix}[\vec{v}]_{A} = [\vec{u}]_{A}^TG_A[\vec{v}]_{A}.
\end{align}</span></p>
<p>The matrix <span class="math-container">$G_A$</span> is known as <a href="https://en.wikipedia.org/wiki/Gram_matrix" rel="nofollow noreferrer">the Gramian</a>. Suppose that <span class="math-container">$B = A[B]_A$</span>, then
<span class="math-container">\begin{align}
\vec{v} = B[\vec{v}]_B = A[B]_A[\vec{v}]_B = A[\vec{v}]_A \implies [B]_A[\vec{v}]_B=[\vec{v}]_A \implies [\vec{v}]_B = [B]_A^{-1}[\vec{v}]_A.
\end{align}</span></p>
<p>The inner product is then consistent:</p>
<p><span class="math-container">\begin{align}
\langle\vec{u}, \vec{v}\rangle &amp;= \langle B[\vec{u}]_{B},  B[\vec{v}]_{B}\rangle = 
\langle A[B]_A[B]_A^{-1}[\vec{u}]_A, A[B]_A[B]_A^{-1}[\vec{v}]_A\rangle = 
\langle A[\vec{u}]_A,A[\vec{v}]_A\rangle = [\vec{u}]_A^TG_A[\vec{v}]_A.
\end{align}</span></p>
<p>If the Gramian is not the identity then generally:</p>
<p><span class="math-container">$$\langle \vec{u},\vec{v}\rangle = [\vec{u}]_A^TG_A[\vec{v}]_A \ne [\vec{u}]_A^T[\vec{v}]_A.$$</span></p>
<p>So if you treat <span class="math-container">$[\vec{u}]_A = (3,0,0)$</span> as being of length 3 for arbitrary bases <span class="math-container">$A$</span>, that is incorrect, its length can be computed as <span class="math-container">$$\|\vec{v}\|_2 = \sqrt{\begin{bmatrix} 3 &amp; 0 &amp; 0 \end{bmatrix} A^TA \begin{bmatrix} 3 \\ 0 \\ 0 \end{bmatrix}}.$$</span></p>
<p>If you're performing an <a href="https://en.wikipedia.org/wiki/Active_and_passive_transformation" rel="nofollow noreferrer">active transformation</a> then you're not actually transforming the basis but the vector/point itself. In that case the above does not hold and the vector can indeed change length and angles w.r.t. other vectors. Typically you world space is interpreted the &quot;top space&quot;, so any transformation that is not meant to change the space of a vector/point should be treated as an active transformation there. That is, even though things are muddled in CG, I believe that all transformations are passive except for the model to world transformation. Those transformation ought to be considered active, since you would actually like to measure different angles and lengths in world space.</p>
<hr />
<p><strong>10. Is my conception of these subjects completely off?</strong></p>
<p>I don't know. That's up to you to judge.
I should note that the above apply to how contravariant vectors transform. The transformation of covariant vectors, higher order tensors, pseudovectors, multivectors, tensor densities and so on is not covered by my above explanation. Normals for instance need to be transformed with either <span class="math-container">$M^{-T}$</span> or <span class="math-container">$\operatorname{cof}(M)$</span> where the latter is the cofactor matrix. This is because upon rescaling, shearing, or other transforms that are not similarity transforms, they need to be treated as bivectors or covectors if you want the orthogonality to the geometry to be preserved.</p>

CC BY-SA 4.0
2024-11-22T22:22:35.053Z
This answer is fantastic! I can't thank you enought for putting together this information. Thank you so much.
Dess
CC BY-SA 4.0
2024-11-22T22:22:43.673Z
I'm somewhat of a slow learner, so it's going to take me going over the answer many times in order to fully understand it. Instead of rushing, I want to take my time and savor the learning process because I'm really interested in this particular subject, and I very much want to understand the implications of each answer. There's so much goodness here, and I don't want to miss anything.
Dess
CC BY-SA 4.0
2024-11-22T18:46:06.363Z
2024-11-22T19:03:23.463Z
2024-11-22T19:03:23.463Z
lightxbulb
<p>In the context of 3D graphics, and specifically of coordinate systems, we can think of there being a root coordinate system, and there being 0 or more nested child coordinate systems (CCS) within that root system. For discussion sake, the root system is the World Coordinate System.</p>
<p>In regards to the CCSs, I have some uncertainty regarding the subject of coordinate system Origins, Axes, and Basis Vectors. I'm not 100% sure of the demarcation of their similarities and differences.</p>
<p>The fundamental question I have is: What are the similarities and differences between these 3 concepts -- Origin, Axes, and Basis Vectors -- when viewed from 2 different perspectives:</p>
<p>A) The outside perspective of the CCS (that is, when viewed from the parent system towards the child system).</p>
<p>B) When viewed from within the CCS itself.</p>
<p>I ask from both perspectives because there might be some concepts that are equivalent when looking at it from one perspective, but different when looking at it from another. For example, maybe the concepts of Axes and Basis are the same for a system when looking at them from within, but are different when looking at them from the parent's perspective.</p>
<p>Can someone please compare and contrast these 3 concepts? I would really appreciate it.</p>
<p>Below is a list of open questions I still have. For each question, please assume I'm asking from both perspectives: A) As viewed from parent to child, B) As viewed from within the child to itself.</p>
<hr />
<ol>
<li><p>Is &quot;Axes&quot; a synonym for &quot;Basis Vectors&quot;, or are there actually any differences between them?</p>
</li>
<li><p>Does the basis of a coordinate system only influence things within the coordinate system itself (ie. being part of the linear combinations within the system), or does the basis have any type of interaction with either the parent coordinate system, or nested coordinate systems?</p>
</li>
<li><p>When a CCS is translated, rotated, skewed, or otherwise transformed, from the perspective of the parent system, what is it that is transformed? Is it the origin, the basis, axes, or a combination?</p>
</li>
<li><p>When performing a coordinate space transformation on a 3d model via matrix multiplication (like model-to-world transform), the columns of the matrix represent displacements of the target coordinate system's x-, y-, and z- coordinates. Do those columns represent the basis vectors of the target coordinate system, or do they represent its origin as viewed from the &quot;from&quot; system, or a combination of the 2?</p>
</li>
<li><p>When looking at it from within a CCS, are the Basis Vectors always in standard form? That is: i/x=[1 0 0], j/y=[0 1 0], k/z=[0 0 1] -- Or are there cases when geometric entities (points, vectors, etc) experience their own basis vectors as something other than standard?</p>
</li>
<li><p>Similar to #5, do the basis of a CCS always appear in standard form when looking at it from a parent system?</p>
</li>
<li><p>Do parent systems &quot;know&quot; the values of the basis of its CCS? For example, if a CCS' z basis is [0, 0, 1.5], can the parent system &quot;see&quot; that?</p>
</li>
<li><p>What are the valid transformations (translation vs rotation, etc) that can be applied to a CCS' Origin? Can the same operations also be applied to its Basis (and if different, its Axes)?</p>
</li>
<li><p>Are the unit values within coordinate systems, as a group, always the same? That is, is the distance of &quot;3 units&quot; interpreted the same in parent and child coordinate systems, or can-they/do-they differ?</p>
</li>
<li><p>Is my conception of these subjects completely off?</p>
</li>
</ol>

CC BY-SA 4.0
2024-11-22T01:32:19.050Z
Vectors are elements of a vector space. They exist even without a reference to a coordinate system. A coordinate system $A$ is defined through an "origin" point $a_0$ along with a basis $a_1, \ldots, a_n$. The defining property of a basis is that it provides unique coordinates for any vector. Let $v$ be a vector and $[v]_A^i$ be its $i$-th coordinate in $A$, then by definition $v= \sum_{i=1}^n [v]_A^i a_i$. The origin can be used to provide an extra offset: $v= a_0 + \sum_{i=1}^n [v-a_0]_A^i a_i$. For two coord systems you can construct a transformation to convert coords from one to the other.
lightxbulb
CC BY-SA 4.0
2024-11-22T03:12:05.777Z
@lightxbulb Some questions:
1) Is the origin **point** $a_0$ and the basis vectors $a_1, ..., a_n$ members of the same set? So the set contains a point and n vectors?
2) That definition of **v** requires the basis to be standard/orthonormal, correct?
3) If the origin is a point then, in the definition of the vector with an offset, wouldn't the addition of a point and a vector result in a point?
Dess
CC BY-SA 4.0
2024-11-22T22:44:51.443Z
1) Yes, all are technically from $\mathbb{R!}^n$. However, if you extend them to homogeneous coordinates you would typically extend $a_0$ with a $1$ precisely because it is a point affected by translations, and you would extend $a_i$ with a zero because they are not affected by translations. 2) No, that holds for any basis. It is the computation of the coordinates that is special for orthogonal bases. Suppose that $\langle\cdot,\cdot\rangle$ is a non-degenerate bilinear form (e.g. inner product). Two vectors $u,v$ are orthogonal w.r.t. thos inner product if $\langle u, v\rangle$. If your...
lightxbulb
CC BY-SA 4.0
2024-11-22T22:52:06.533Z
... basis vectors are orthogonal wrt this inner product, i.e. $\langle a_i, a_j\rangle = 0$ for $i\ne j$ then the coordinates of $v$ can be computed as $[v]_A^i = \frac{\langle a_i, v\rangle}{\langle a_i, a_i\rangle}$. This is verified as: $\langle a_i, v\rangle = \sum_j [v]_A^j\langle a_i, a_j\rangle = [v]_A^j \langle a_i, a_i\rangle$. This works for inner products, but may break for non-degenerate indefinite bilinear forms, in which case you need the biorthogonal basis from the dual in order to compute the coordinates. Now suppose the basis is NOT orthogonal then the inner products give you
lightxbulb
CC BY-SA 4.0
2024-11-22T22:57:53.243Z
$$\langle a_i, v\rangle = \sum_j \langle a_i, a_j\rangle [v]_A^j \iff G_A[v]_A = b.$$
In other words you have to solve a dense linear system in the non-orthogonal case in order to compute coordinates. You have probably seen this in CG - you have to invert matrices to compute some coordinates. But while the computation of the coords may be harder, the reconstruction is still $v=\sum_j [v]_A^j a_j$. 3) Generally yes, if you add a point and a "vector" (in the sense of having $0$ hom coord) you get a point. If you subtract two points (hok coord $1$) you get a "vector" (hom coord $0$).
lightxbulb
<transformations><coordinates>
Origins, Basis, and Axes
Dess
# Origins, Basis, and Axes

(Asked by: username_0 on 2024-11-22)

In the context of 3D graphics, and specifically of coordinate systems, we can think of there being a root coordinate system, and there being 0 or more nested child coordinate systems (CCS) within that root system. For discussion sake, the root system is the World Coordinate System.

In regards to the CCSs, I have some uncertainty regarding the subject of coordinate system Origins, Axes, and Basis Vectors. I'm not 100% sure of the demarcation of their similarities and differences.

The fundamental question I have is: What are the similarities and differences between these 3 concepts -- Origin, Axes, and Basis Vectors -- when viewed from 2 different perspectives:

A) The outside perspective of the CCS (that is, when viewed from the parent system towards the child system).

B) When viewed from within the CCS itself.

I ask from both perspectives because there might be some concepts that are equivalent when looking at it from one perspective, but different when looking at it from another. For example, maybe the concepts of Axes and Basis are the same for a system when looking at them from within, but are different when looking at them from the parent's perspective.

Can someone please compare and contrast these 3 concepts? I would really appreciate it.

Below is a list of open questions I still have. For each question, please assume I'm asking from both perspectives: A) As viewed from parent to child, B) As viewed from within the child to itself.

---

1. Is "Axes" a synonym for "Basis Vectors", or are there actually any differences between them?
2. Does the basis of a coordinate system only influence things within the coordinate system itself (ie. being part of the linear combinations within the system), or does the basis have any type of interaction with either the parent coordinate system, or nested coordinate systems?
3. When a CCS is translated, rotated, skewed, or otherwise transformed, from the perspective of the parent system, what is it that is transformed? Is it the origin, the basis, axes, or a combination?
4. When performing a coordinate space transformation on a 3d model via matrix multiplication (like model-to-world transform), the columns of the matrix represent displacements of the target coordinate system's x-, y-, and z- coordinates. Do those columns represent the basis vectors of the target coordinate system, or do they represent its origin as viewed from the "from" system, or a combination of the 2?
5. When looking at it from within a CCS, are the Basis Vectors always in standard form? That is: i/x=[1 0 0], j/y=[0 1 0], k/z=[0 0 1] -- Or are there cases when geometric entities (points, vectors, etc) experience their own basis vectors as something other than standard?
6. Similar to #5, do the basis of a CCS always appear in standard form when looking at it from a parent system?
7. Do parent systems "know" the values of the basis of its CCS? For example, if a CCS' z basis is [0, 0, 1.5], can the parent system "see" that?
8. What are the valid transformations (translation vs rotation, etc) that can be applied to a CCS' Origin? Can the same operations also be applied to its Basis (and if different, its Axes)?
9. Are the unit values within coordinate systems, as a group, always the same? That is, is the distance of "3 units" interpreted the same in parent and child coordinate systems, or can-they/do-they differ?
10. Is my conception of these subjects completely off?

**Tags:** transformations, coordinates

> **Comments:**
> **username_1**: Vectors are elements of a vector space. They exist even without a reference to a coordinate system. A coordinate system $A$ is defined through an "origin" point $a_0$ along with a basis $a_1, \ldots, a_n$. The defining property of a basis is that it provides unique coordinates for any vector. Let $v$ be a vector and $[v]_A^i$ be its $i$-th coordinate in $A$, then by definition $v= \sum_{i=1}^n [v]_A^i a_i$. The origin can be used to provide an extra offset: $v= a_0 + \sum_{i=1}^n [v-a_0]_A^i a_i$. For two coord systems you can construct a transformation to convert coords from one to the other.  
> **username_0**: @username_1 Some questions: 1) Is the origin **point** $a_0$ and the basis vectors $a_1, ..., a_n$ members of the same set? So the set contains a point and n vectors? 2) That definition of **v** requires the basis to be standard/orthonormal, correct? 3) If the origin is a point then, in the definition of the vector with an offset, wouldn't the addition of a point and a vector result in a point?  
> **username_1**: 1) Yes, all are technically from $\mathbb{R!}^n$. However, if you extend them to homogeneous coordinates you would typically extend $a_0$ with a $1$ precisely because it is a point affected by translations, and you would extend $a_i$ with a zero because they are not affected by translations. 2) No, that holds for any basis. It is the computation of the coordinates that is special for orthogonal bases. Suppose that $\langle\cdot,\cdot\rangle$ is a non-degenerate bilinear form (e.g. inner product). Two vectors $u,v$ are orthogonal w.r.t. thos inner product if $\langle u, v\rangle$. If your...  
> **username_1**: ... basis vectors are orthogonal wrt this inner product, i.e. $\langle a_i, a_j\rangle = 0$ for $i\ne j$ then the coordinates of $v$ can be computed as $[v]_A^i = \frac{\langle a_i, v\rangle}{\langle a_i, a_i\rangle}$. This is verified as: $\langle a_i, v\rangle = \sum_j [v]_A^j\langle a_i, a_j\rangle = [v]_A^j \langle a_i, a_i\rangle$. This works for inner products, but may break for non-degenerate indefinite bilinear forms, in which case you need the biorthogonal basis from the dual in order to compute the coordinates. Now suppose the basis is NOT orthogonal then the inner products give you  
> **username_1**: $$\langle a_i, v\rangle = \sum_j \langle a_i, a_j\rangle [v]_A^j \iff G_A[v]_A = b.$$ In other words you have to solve a dense linear system in the non-orthogonal case in order to compute coordinates. You have probably seen this in CG - you have to invert matrices to compute some coordinates. But while the computation of the coords may be harder, the reconstruction is still $v=\sum_j [v]_A^j a_j$. 3) Generally yes, if you add a point and a "vector" (in the sense of having $0$ hom coord) you get a point. If you subtract two points (hok coord $1$) you get a "vector" (hom coord $0$).  

---

## 1 answers

### Answer by username_1 on 2024-11-22. Score: 2 | Accepted answer

I think the confusion arises precisely because of the computer graphics context. The notions of basis, coordinate system, axes, and so on have mathematical definitions, and what you see in graphics is just an application of those concepts with extra jargon attached on top.

The reply to the first two points is fairly lengthy, since I do not know how to rigorously explain this without resorting to linear algebra. However once this is understood the rest comes almost for free.

---

**1. Axis, Basis Vectors, Coordinate System**

The formal definition of an axis is an oriented line: ["In real coordinate space, an oriented line is also known as an axis."](https://en.wikipedia.org/wiki/Orientation_(vector_space)#On_a_line) Unlike a basis vector it does not prescribe lengths. On the other hand it doesn't necessarily pass through the origin. However, in graphics I believe that it is sometimes used interchangeably with the basis vectors when those are positioned at the origin of your coordinate system. This is likely because the origin of the coordinate system $\vec{a}\_0$ along with a basis vector $\vec{a}\_i$ uniquely determines an oriented line as $\vec{l}\_i(t) = \vec{a}\_0 + t\vec{a}\_i$, where the positive orientation is along $\vec{a}\_i$ and the opposite is along $-\vec{a}\_i$. Note that formally the converse is not true despite the interchangeable usage in graphics, i.e., an oriented line does not uniquely determine a basis vector or an origin.

---

**2.1. Basis: Mathematical Definition**

A basis $A$ (in a finite-dimensional space) is just an $n$-tuple of linearly independent vectors
$$A = \begin{bmatrix} | & & | \\ \vec{a}\_1 & \ldots & \vec{a}\_n \\ | & & | \end{bmatrix}\in V^{1\times n},$$
that spans the vector space $(V,\mathbb{F},+,\cdot)$. If $V=\mathbb{R}^n, \mathbb{F} = \mathbb{R},$ then the above is an invertible matrix from $\mathbb{R}^{n\times n}$. It gives you unique coordinates $[\vec{v}]\_A\in\mathbb{R}^{n\times 1}$ for any vector $\vec{v}\in V$:
$$\vec{v} = \sum\_{i=1}^n [\vec{v}]\_A^i \vec{a}\_i
=\begin{bmatrix} | & & | \\ \vec{a}\_1 & \ldots & \vec{a}\_n \\ | & & | \end{bmatrix} \begin{bmatrix}
[\vec{v}]\_A^1 \\ \vdots \\ [\vec{v}]\_A^n
\end{bmatrix} = A [\vec{v}]\_A.$$
A different basis $B$ for the same space may give you different coordinates $[\vec{v}]\_B\ne[\vec{v}]\_A$ for the same vector $\vec{v}$:
$$B[\vec{v}]\_B = \sum\_{i=1}^n [\vec{v}]^i\_B \vec{b}\_i = \vec{v} = \sum\_{i=1}^n [\vec{v}]\_A^i \vec{a}\_i = A [\vec{v}]\_A.$$
So the only thing a basis influences are coordinates.

**2.1a. A Note on the Necessity for Abstraction**

A natural question is what is the difference between vectors and elements of $\mathbb{R}^n$. The thing is that a vector space can be more abstract, e.g., $V = \{p:\mathbb{R}\to\mathbb{R}\,|\, \sum\_{j=0}^{n-1} c\_j t^n, \,c\_j\in\mathbb{R}\}$, with the standard function addition and real number multiplication, is the vector space of real polynomials of at most degree $(n-1)$. Here vectors $\vec{v}\in V$ are polynomial functions. However the idea of coordinates remains virtually the same:

$$\vec{v} = \sum\_{i=1}^n [\vec{v}]\_A^i \vec{a}\_i = A [\vec{v}]\_A.$$

The only thing that changes is that $A$ is not an $n\times n$ matrix anymore, but it is instead a matrix from $V^{1\times n}$ where the elements are the polynomial basis functions, e.g. $A = \begin{bmatrix} 1 & t & t^2 & \ldots & t^{n-1}\end{bmatrix}$, then the coordinates are the polynomial coefficients in the monomial basis. So abstraction allows for more generality, where the above definitions do not only apply to arrows in Euclidean space.

**2.2. Coordinate System**

If you also add an origin $\vec{a}\_0$ then you end up with a coordinate system
$$A\_0 = \begin{bmatrix} | & | & & | \\ \vec{a}\_0 & \vec{a}\_1 & \ldots & \vec{a}\_n \\ | & | & & | \end{bmatrix}\in V^{1\times (1+n)}.$$
The coordinates $[\vec{v}]\_{A\_0}$ of any vector $\vec{v}$ are related to its coordinates $[\vec{v}]\_{A}$ in a simple manner:
$$\vec{v} = \vec{a}\_0 + \sum\_{i=1}^n[\vec{v}]^i\_{A\_0}\vec{a}\_i \implies \vec{v}- \vec{a}\_0 = \sum\_{i=1}^n[\vec{v}]^i\_{A\_0}\vec{a}\_i = \sum\_{i=1}^n[\vec{v}-\vec{a}\_0]^i\_{A}\vec{a}\_i \implies [\vec{v}]\_{A\_0} = [\vec{v}]\_A-[\vec{a}\_0]\_A.$$
Thus the coordinates $[\vec{v}]\_{A\_0}$ are just $[\vec{v}]\_A$ with a shift by the negated coordinates $-[\vec{a}\_0]\_A$ of $\vec{a}\_0$ in $A$.

**2.3. Basis Coordinates vs Coordinate System Coordinates**

In graphics you typically work with $[\vec{v}]\_{A\_0}$ whenever a coordinate system is given. A compact notation similar to $\vec{v} = A[\vec{v}]\_A$ is:

$$\vec{v} = \vec{a}\_0 + \sum\_{i=1}^n [\vec{v}]\_{A\_0}^i\vec{a}\_i =
\begin{bmatrix}
| & | & & | \\ \vec{a}\_0 & \vec{a}\_1 & \ldots & \vec{a}\_n \\ | & | & & |
\end{bmatrix}\begin{bmatrix} 1 \\ [\vec{v}]^1\_{A\_0} \\ \vdots \\ [\vec{v}]^n\_{A\_0}\end{bmatrix} = A\_0 \langle\vec{v}\rangle\_{A\_0}, \quad
\langle\vec{v}\rangle\_{A\_0} := \begin{bmatrix} 1 \\ [\vec{v}]\_{A\_0} \end{bmatrix}.
$$

For lack of better notation I have used $\langle \vec{v} \rangle\_{A\_0}$ for the extension of the coordinates $[\vec{v}]\_{A\_0}$ with a $1$, note however that this is not standard notation. The above is similar to what is done in CG for homogeneous coordinates, although I put the $1$ in the $0$-th slot, while in CG they like to put it in the $(n+1)$-st slot. On the other hand you cannot put an arbitrary non-zero number instead of the $1$ here, as that would mess up $\vec{v}$, So the above is just for conciseness of notation. You could put a zero, however, if you use $[\vec{v}]\_A$ which results in:
$$\vec{v} = A\_0\langle \vec{v}\rangle\_{A} = A[\vec{v}]\_A, \quad \langle \vec{v}\rangle\_A := \begin{bmatrix} 0 \\ [\vec{v}]\_A\end{bmatrix}.$$

You will notice that I defined $\langle\cdot\rangle$ in two ways, whenever it was w.r.t. $A$ I put a zero, and when it was w.r.t. $A\_0$ I put a $1$. This allows you to distinguish whether a vector is in $A$ or $A\_0$ just by looking at "the homogeneous coordinate". In CG typically coordinates w.r.t. $A$ (i.e. using a zero) are used when working with "direction vectors" that should not be affected by translations, while coordinates w.r.t. $A\_0$ (i.e. using a one) are used to when working with points that should be affected by translations.

**2.3a Coordinate System Coordinates**

From the previous we know that if we have a point $\vec{p}$ we would typically store its coordinates $[\vec{p}]\_{A\_0}$ w.r.t. $A\_0$, while if we have a "direction vector" $\vec{d}$ we would typically store its coordinates $[\vec{d}]\_{A}$ w.r.t. $A$, with the reconstruction rules:
$$
\vec{p} = A\_0\langle \vec{p}\rangle\_{A\_0}, \quad \vec{d} = A\_0\langle \vec{d}\rangle\_{A}
$$

In the next section I will need reconstruction rules for the coordinate systems from their coordinaates, so I generalise the above to this setting. A coordinate system itself is a collection of $n+1$ vectors, where we treat the zero-th as a point, and the rest as "directional vectors", in other words $\vec{a}\_0$ is expressed in $A\_0$ and $\vec{a}\_i$ are expressed in $A$ for $1\leq i\leq n$. For convenience and to reflect the above I generalize the notation $\langle\cdot\rangle$ to the coordinates of $B\_0$ as follows:
$$\langle B\_0\rangle\_{A\_0} = \begin{bmatrix}
| & | & & | \\
\langle \vec{b}\_0 \rangle\_{A\_0} & \langle \vec{b}\_1\rangle\_A & \ldots & \langle \vec{b}\_n\rangle\_A \\ | & | & & |\end{bmatrix} =
\begin{bmatrix}
1 & 0 & \ldots & 0 \\
| & | & & | \\
[\vec{b}\_0]\_{A\_0} & [\vec{b}\_1]\_{A} & \ldots & [\vec{b}\_n]\_{A} \\
| & | & & | \end{bmatrix}.
$$
Note that this is how a typical transformation matrix looks like up to switching the first and last column and rows. In the above the translation factor is in the first column and the basis transformation is in the lower right part.

Now you can reconstruct $B\_0$ as follows:

\begin{align}B\_0 &= A\_0\langle B\_0\rangle\_{A\_0}
\\
\begin{bmatrix} | & | & & | \\ \vec{b}\_0 & \vec{b}\_1 & \ldots & \vec{b}\_n \\ | & | & & | \end{bmatrix} &= \begin{bmatrix} | & | & & | \\ \vec{a}\_0 & \vec{a}\_1 & \ldots & \vec{a}\_n \\ | & | & & | \end{bmatrix}\begin{bmatrix} | & | & & | \\ \langle\vec{b}\_0\rangle\_{A\_0} & \langle \vec{b}\_1\rangle\_{A} & \ldots& \langle \vec{b}\_n\rangle\_{A} \\ | & | & & |\end{bmatrix}.
\end{align}

**2.4. "Nested" Coordinate Systems**

Now suppose I have $m+1$ coordinate system $C\_0,\ldots,C\_m$ and that I store the coordinates $[C\_{k+1}]\_{C\_k}$ of $C\_{k+1}$ expressed in the basis $C\_k$, i.e., $C\_{k+1} = C\_k \langle C\_{k+1}\rangle\_{C\_k}$. Then in graphics $C\_{k+1}$ is termed a child of $C\_k$ and $C\_k$ is termed the parent of $C\_{k+1}$. The nesting becomes obvious if one expands $C\_{k+1} = C\_k \langle C\_{k+1}\rangle \_{C\_k}$ as follows:
$$C\_{k+1} = C\_k \langle C\_{k+1}\rangle\_{C\_k} = C\_{k-1} \langle C\_{k}\rangle\_{C\_{k-1}}\langle C\_{k+1}\rangle\_{C\_k}
= \ldots = C\_0 \langle C\_1\rangle\_{C\_0} \langle C\_2\rangle\_{C\_1} \ldots \langle C\_{k+1}\rangle\_{C\_k} = C\_0 \langle C\_{k+1}\rangle\_{C\_0}.$$

Now if you have the coordinates $[\vec{v}]\_{C\_m}$ of a vector $\vec{v}$ w.r.t. $C\_m$ then you can reconstruct the vector as:

$$\vec{v} = C\_m \langle\vec{v}\rangle\_{C\_m} = C\_0\langle C\_1\rangle\_{C\_0}\ldots \langle C\_m\rangle\_{C\_{m-1}} \langle \vec{v}\rangle\_{C\_m} = C\_0 \langle \vec{v}\rangle\_{C\_0}.$$

The coordinate systems themselves are not nested as that wouldn't make sense. It's the coordinate representations of those that are nested, and you see above that given the coordinate $[\vec{v}]\_{C\_m}$ you can use this to get its coordinates $[\vec{v}]\_{C\_k}$ by taking $m-k$ steps up the chain.

**2.4a. Examples**

A typical setting would have $C\_0$ as the world space coordinate system and $C\_1$ as model space, $[C\_1]\_{C\_0}$ being the coordinates of $C\_1$ w.r.t. $C\_0$. In fact the model to world matrix $P\_{M\to W}$ in homogeneous coordinates is then:
$$P\_{M\to W} = \begin{bmatrix} | & & | & | \\ [\vec{c}\_{1,1}]\_{C\_0} & \ldots & [\vec{c}\_{1,n}]\_{C\_0} & [\vec{c}\_{1,0}]\_{C\_0} \\ | & & | & | \\ 0 & \ldots & 0 & 1\end{bmatrix},$$
which is the same as $\langle C\_1\rangle\_{C\_0}$ up to a switch of the first and last column and rows.

A more complex example would have the world space coordinate system $W$ as well as the camera coordinate system's coordinates $[C]\_W$ expressed in world space, as well as some model's coordinate system's coordinates $[M]\_W$ expressed in world space. Typically here you have $[\vec{v}]\_M$ and you want to find $[\vec{v}]\_C$. Then you can use

\begin{align}
\vec{v} &= C\langle \vec{v}\rangle\_C = W\langle C\rangle\_W\langle\vec{v}\rangle\_C \\
\vec{v} &= M\langle\vec{v}\rangle\_M = W\langle M\rangle\_W\langle \vec{v}\rangle\_M.
\end{align}

Since both sides are equal to the same thing we can just identify the coordinates:
$$
\langle C\rangle\_W\langle\vec{v}\rangle\_C =\langle M\rangle\_W\langle \vec{v}\rangle\_M \implies \langle\vec{v}\rangle\_C = \langle C\rangle\_W^{-1}\langle M\rangle\_W\langle \vec{v}\rangle\_M.
$$

---

**3. Child Coordinate System Transformation**

Suppose you have the coordinates $[C\_0]\_{P\_0}$ of a "child" coordinate system $C\_0$ expressed in the coordinate system $P\_0$. And consider the transformation matrix:

$$T = \begin{bmatrix} 1 & \vec{0}^T \\ \vec{t} & M \end{bmatrix},$$

that encodes a translation $\vec{t}$ and a linear transformation $M$. The results depend on what side you multiply with $\langle C\_0\rangle\_{P\_0}$:

\begin{align}
T\langle C\_0\rangle\_{P\_0} &= \begin{bmatrix} 1 & \vec{0}^T \\ \vec{t} & M \end{bmatrix}\begin{bmatrix} 1 & \vec{0}^T \\ \vec{c}\_0 & C \end{bmatrix} =
\begin{bmatrix}
1 & \vec{0}^T \\
\vec{t} + M\vec{c}\_0 & MC
\end{bmatrix}
\\
\langle C\_0\rangle\_{P\_0}T &= \begin{bmatrix} 1 & \vec{0}^T \\ \vec{c}\_0 & C \end{bmatrix}\begin{bmatrix} 1 & \vec{0}^T \\ \vec{t} & M \end{bmatrix} =
\begin{bmatrix}
1 & \vec{0}^T \\
\vec{c}\_0 + C\vec{t} & CM
\end{bmatrix}.
\end{align}

Suppose that you apply a translation only, i.e., $M=I\_n$. Then the first translates w.r.t. the basis of the coordinate system $P$, while the latter translates w.r.t. the basis of the coordinate system $C$. That is you can regard this as $\vec{t}\equiv[\vec{t}]\_P$ in the first case and $\vec{t}\equiv[\vec{t}]\_C$ in the second. Similarly, suppose that $\vec{t} = \vec{0}$ and $M$ is a rotation matrix. Then the first rotates $\vec{c}\_0$ and $C$ around the origin of $P$, i.e., you can interpret $M\equiv [M]\_P$ in the first case. In the second case the rotation happens around $\vec{c}\_0$ and w.r.t. the basis $C$, i.e. $M\equiv [M]\_{C}$.

---

**4. Coordinates Representation**

The examples from 2.4a with model to world and model to camera space should have answered this question.

---

**5. Coordinates w.r.t. the System Itself**

You know that $B\_0 = A\_0\langle B\_0\rangle\_{A\_0}$, now set $B\_0=A\_0$, then $A\_0 = A\_0\langle A\_0\rangle\_{A\_0}$, and the matrix must necessarily be the identity. So yes, the coordinates of the basis vectors w.r.t. the basis itself are the canonical vectors. Similarly the coordinates of the origin with respect to the system itself is zero since $$[\vec{a}\_0]\_{A\_0} = [\vec{a}\_0]\_A - [\vec{a}\_0]\_A = \vec{0}.$$

---

**6. Coordinates w.r.t. Some Other System**

Suppose $[C\_0]\_{P\_0}$ is given. It is the identity matrix only if $C\_0=P\_0$. If $\vec{c}\_0\ne\vec{p}\_0$ but $C=P$ then the origin coordinates $[\vec{c}\_0]\_{P\_0}$ are non-zero, but the rest is the identity. Vice versa if $\vec{c}\_0 =\vec{p}\_0$ but $C\ne P$ then the origin coordinates $[\vec{c}\_0]\_{P\_0}$ are zero, but the rest is arbitrary.

---

**7. What does the "Parent" Coordinate System Know About the "Child" System**

If $[C\_0]\_{P\_0}$ is available the parent $P\_0$ knows everything about the child, and it can reconstruct it as $C\_0 = P\_0\langle C\_0\rangle\_{P\_0}$.

---

**8. Transformations Applicable to the Origin and Basis**

The basis is not affected by translational transformations, i.e. it accepts only linear transformations similar to "direction vectors". The origin can be transformed with any affine trasformation (translation + linear transformation), similar to how points transform. Refer to section 3.

---

**9. Metrics in Different Systems**

If you interpret everything as [passive transformations](https://en.wikipedia.org/wiki/Active_and_passive_transformation) then necessarily the inner product and thus norm are preserved because the vectors themselves do not change. The trick is that whenever you transform a coordinate system with some matrix $T$ you are also supposed to transform its coordinates with the opposite transformation in order for the coordinates to remain correct.

Suppose you have the coordinate system $A\_0$ and the "direction vectors" $\vec{u}, \vec{v}$, then you can compute their coordinates $[\vec{u}]\_{A},[\vec{v}]\_{A}$ and you have that $\vec{u} = A[\vec{u}]\_{A}$ and $\vec{v} = A[\vec{v}]\_{A\_0}$. You can compute the inner product $\langle \vec{u},\vec{v}\rangle$ of the vectors as follows:

\begin{align}
\langle\vec{u}, \vec{v}\rangle &= \langle A[\vec{u}]\_{A}, A[\vec{v}]\_{A}\rangle =
[\vec{u}]\_A^T \begin{bmatrix} \langle \vec{a}\_1, \vec{a}\_1\rangle & \ldots & \langle \vec{a}\_1,\vec{a}\_n \rangle \\ \vdots & & \vdots \\ \langle \vec{a}\_n, \vec{a}\_1\rangle & \ldots & \langle \vec{a}\_n, \vec{a}\_n\rangle\end{bmatrix}[\vec{v}]\_{A} = [\vec{u}]\_{A}^TG\_A[\vec{v}]\_{A}.
\end{align}

The matrix $G\_A$ is known as [the Gramian](https://en.wikipedia.org/wiki/Gram_matrix). Suppose that $B = A[B]\_A$, then
\begin{align}
\vec{v} = B[\vec{v}]\_B = A[B]\_A[\vec{v}]\_B = A[\vec{v}]\_A \implies [B]\_A[\vec{v}]\_B=[\vec{v}]\_A \implies [\vec{v}]\_B = [B]\_A^{-1}[\vec{v}]\_A.
\end{align}

The inner product is then consistent:

\begin{align}
\langle\vec{u}, \vec{v}\rangle &= \langle B[\vec{u}]\_{B}, B[\vec{v}]\_{B}\rangle =
\langle A[B]\_A[B]\_A^{-1}[\vec{u}]\_A, A[B]\_A[B]\_A^{-1}[\vec{v}]\_A\rangle =
\langle A[\vec{u}]\_A,A[\vec{v}]\_A\rangle = [\vec{u}]\_A^TG\_A[\vec{v}]\_A.
\end{align}

If the Gramian is not the identity then generally:

$$\langle \vec{u},\vec{v}\rangle = [\vec{u}]\_A^TG\_A[\vec{v}]\_A \ne [\vec{u}]\_A^T[\vec{v}]\_A.$$

So if you treat $[\vec{u}]\_A = (3,0,0)$ as being of length 3 for arbitrary bases $A$, that is incorrect, its length can be computed as $$\|\vec{v}\|\_2 = \sqrt{\begin{bmatrix} 3 & 0 & 0 \end{bmatrix} A^TA \begin{bmatrix} 3 \\ 0 \\ 0 \end{bmatrix}}.$$

If you're performing an [active transformation](https://en.wikipedia.org/wiki/Active_and_passive_transformation) then you're not actually transforming the basis but the vector/point itself. In that case the above does not hold and the vector can indeed change length and angles w.r.t. other vectors. Typically you world space is interpreted the "top space", so any transformation that is not meant to change the space of a vector/point should be treated as an active transformation there. That is, even though things are muddled in CG, I believe that all transformations are passive except for the model to world transformation. Those transformation ought to be considered active, since you would actually like to measure different angles and lengths in world space.

---

**10. Is my conception of these subjects completely off?**

I don't know. That's up to you to judge.
I should note that the above apply to how contravariant vectors transform. The transformation of covariant vectors, higher order tensors, pseudovectors, multivectors, tensor densities and so on is not covered by my above explanation. Normals for instance need to be transformed with either $M^{-T}$ or $\operatorname{cof}(M)$ where the latter is the cofactor matrix. This is because upon rescaling, shearing, or other transforms that are not similarity transforms, they need to be treated as bivectors or covectors if you want the orthogonality to the geometry to be preserved.

> **Comments:**
> **username_0**: This answer is fantastic! I can't thank you enought for putting together this information. Thank you so much.  
> **username_0**: I'm somewhat of a slow learner, so it's going to take me going over the answer many times in order to fully understand it. Instead of rushing, I want to take my time and savor the learning process because I'm really interested in this particular subject, and I very much want to understand the implications of each answer. There's so much goodness here, and I don't want to miss anything.  

---

