I was interested in how scaling should work in geometric algebra. I read this post: Scaling with PGA?

which was very informative.

I’ve seen “use an outermorphism” pop up a few times as the answer to “how do you do this *some linear transform that isn’t an obvious versor* in GA(p,q,n)?”

So how should one implement this?

Here’s my take:

factor into unit 1-blades

convert to coordinates

apply the transform to coordinate vector

wedge and add everything together to get back to the object type you started with? i.e. wedge blades back together ( the outermorphism ) then use addition to compose back into multivectors/k-vectors?

here’s what I came up with. Aside from obvious optimizations, does this seem correct?

```
function outermorphism(L, b::B) where B<:Blade
sb = factor(b) # (scalar, followed by all 1-blades)
𝐼 = pseudoscalar(b) # need this for making KVector out of coordinates
mapreduce(bᵢ->KVector(L*coords(one(bᵢ)), 𝐼), ∧, sb[2:end])*sb[1]
end
outermorphism(L, k::K) where K<:KVector = mapreduce(b->outermorphism(L, b), +, k)
outermorphism(L, M::MT) where MT<:Multivector = scalar(M) + mapreduce(k->outermorphism(L, k), +, M)
```

seems to work for scaling. although I get covariant ( inverse scaling ) behaviour when applied to PGA points ( but that is to be expected, see the related post )