/ 6
x = QPointF(1., 0.)
T = QTransform(cos(teta), -sin(teta),
sin(teta), cos(teta),
0, 0)
# Tx = b
b = T.map(x)
print("QTransform", b.x(), b.y())
b = QPointF(x.x()*cos(teta) - x.y()*sin(teta), x.x()*sin(teta) + x.y()*cos(teta))
print("math", b.x(), b.y())
выводит
QTransform 0.8660254037844387 -0.49999999999999994
math 0.8660254037844387 0.49999999999999994
т.е. вторая координата с точностью до наоборот.
полез в исходники, и на строчке 1183 нашел такую формулу.
http://code.qt.io/cgit/qt/qtbase.git/tree/src/gui/painting/qtransform.cpp#n1183
x = affine._m11 * fx + affine._m21 * fy + affine._dx;
y = affine._m12 * fx + affine._m22 * fy + affine._dy;
может я чего не понимаю, но какого черта тут складываются множители из (1,1) с (2,1), вместо (1,2)? матрицу трансформации нужно понимать как транспонированную?
это правильно, если считать что координаты - это вектор-строка, а при транформации ты умножаешь его на матрицу справа
Обсуждают сегодня