(box Box)
| 157 | } |
| 158 | |
| 159 | func (a Matrix) MulBox(box Box) Box { |
| 160 | // http://dev.theomader.com/transform-bounding-boxes/ |
| 161 | r := Vector{a.x00, a.x10, a.x20} |
| 162 | u := Vector{a.x01, a.x11, a.x21} |
| 163 | b := Vector{a.x02, a.x12, a.x22} |
| 164 | t := Vector{a.x03, a.x13, a.x23} |
| 165 | xa := r.MulScalar(box.Min.X) |
| 166 | xb := r.MulScalar(box.Max.X) |
| 167 | ya := u.MulScalar(box.Min.Y) |
| 168 | yb := u.MulScalar(box.Max.Y) |
| 169 | za := b.MulScalar(box.Min.Z) |
| 170 | zb := b.MulScalar(box.Max.Z) |
| 171 | xa, xb = xa.Min(xb), xa.Max(xb) |
| 172 | ya, yb = ya.Min(yb), ya.Max(yb) |
| 173 | za, zb = za.Min(zb), za.Max(zb) |
| 174 | min := xa.Add(ya).Add(za).Add(t) |
| 175 | max := xb.Add(yb).Add(zb).Add(t) |
| 176 | return Box{min, max} |
| 177 | } |
| 178 | |
| 179 | func (a Matrix) Transpose() Matrix { |
| 180 | return Matrix{ |
no test coverage detected