31template <
class Number>
52 Number
tx = Number{}, Number
ty = Number{})
61 template <
class OtherNumber>
64 {
static_cast<Number
>(other.
a()),
static_cast<Number
>(other.
b()),
static_cast<Number
>(other.
tx())},
65 {
static_cast<Number
>(other.
c()),
static_cast<Number
>(other.
d()),
static_cast<Number
>(other.
ty())},
79 return Transformation(Number{1}, Number{}, Number{}, Number{1}, dx, dy);
109 switch (((k % 4) + 4) % 4) {
110 case 1:
return Transformation(Number{}, -Number{1}, Number{1}, Number{});
111 case 2:
return Transformation(-Number{1}, Number{}, Number{}, -Number{1});
112 case 3:
return Transformation(Number{}, Number{1}, -Number{1}, Number{});
155 template <std::
floating_po
int ResultNumber =
double>
157 const ResultNumber cosine = std::cos(radians);
158 const ResultNumber sine = std::sin(radians);
163 constexpr Number
a()
const {
return m_[0][0]; }
165 constexpr Number
b()
const {
return m_[0][1]; }
167 constexpr Number
c()
const {
return m_[1][0]; }
169 constexpr Number
d()
const {
return m_[1][1]; }
171 constexpr Number
tx()
const {
return m_[0][2]; }
173 constexpr Number
ty()
const {
return m_[1][2]; }
183 return a() *
d() -
b() *
c();
203 template <
class ResultNumber = division_result_t<NumberType>>
205 const ResultNumber det =
static_cast<ResultNumber
>(
determinant());
206 const ResultNumber ra =
static_cast<ResultNumber
>(
a());
207 const ResultNumber rb =
static_cast<ResultNumber
>(
b());
208 const ResultNumber rc =
static_cast<ResultNumber
>(
c());
209 const ResultNumber rd =
static_cast<ResultNumber
>(
d());
210 const ResultNumber rtx =
static_cast<ResultNumber
>(
tx());
211 const ResultNumber rty =
static_cast<ResultNumber
>(
ty());
215 (rb * rty - rd * rtx) / det,
216 (rc * rtx - ra * rty) / det);
225 template <
class OtherNumber>
227 using ResultNumber = std::common_type_t<Number, OtherNumber>;
229 a() * other.
a() +
b() * other.
c(),
230 a() * other.
b() +
b() * other.
d(),
231 c() * other.
a() +
d() * other.
c(),
232 c() * other.
b() +
d() * other.
d(),
233 a() * other.
tx() +
b() * other.
ty() +
tx(),
234 c() * other.
tx() +
d() * other.
ty() +
ty());
243 std::array<std::array<Number, 3>, 2> m_{{{Number{1}, Number{}, Number{}}, {Number{}, Number{1}, Number{}}}};
260template <
class Number,
class ShapeT>
261 requires (detail::shapeRank<ShapeT> >= 0 && !RectangleConcept<ShapeT> && !DiskConcept<ShapeT>)
262[[nodiscard]]
constexpr auto operator*(
const Transformation<Number>& transformation,
const ShapeT& shape);
269template <
class Number, ShapeConcept ShapeT>
270[[nodiscard]]
constexpr auto operator*(
const Transformation<Number>& transformation,
const ShapeT& shape);
Definition arrangement.hpp:67
Exact rational number type used when geometric results need fractions.