Home

Support functions with non uniform scaling

Given a support function $S_{\text{obj}}(d)$ and a non uniform scale vector you can create a new support function

$S_{\text{scaled}}(d) = S(d * scale) * scale$

where * denotes a component wise vector multiplication.

Consider that $S_{\text{obj}}(d) = \{\ x\ |\ x \cdot d \ge y \cdot d\ \forall x,y \in \text{obj}\}$

Then if we apply a transform to all points in obj the statement becomes:

$S_{\text{scaled}}(d) = \{\ Ax\ |\ Ax \cdot d \ge Ay \cdot d \ \forall x,y \in obj\}$

But note:

$Ax \cdot d = d^T Ax = (d^T A) x = (A^Td)^T x = x \cdot A^T d$

In the case of non uniform scale A is a diagonal matrix so $A^Td$ is simply a component wise vector multiplication.

Remember that $S_{\text{obj}}(A^T d) = \{\ x\  |\ x \cdot A^T d \ge y \cdot A^T d\}$

But  $S_{\text{scaled}}$ must return $Ax$, so we need to multiply the result by $A^T$, which in the case of non uniform scale requires a second component wise vector multiplication.

The general matrix works as well:

$S_A(d) = A\ S(A^T d)$