flutter:使用 Float64List Matrix4 变换 CustomPaint 中的路径

w46*_*461 1 graphics flutter flutter-layout

我试图旋转一些路径,但没有找到片段,并且一般来说,matrix4 没有很好的记录。因此,如果其他人遇到此问题,这就是我的最终结果

w46*_*461 5

首先,这里有一篇关于其背后的数学原理以及如何使用matrix4的精彩读物。

在我的演示中,我使用了箭头提示。由于顺序很重要,我将其绘制在 (0,0) 处,然后绕 z 轴旋转它,最后将尖端移动到所需的位置。

Path _getArrow (Offset offset, double alpha) {
    Path a = Path();
    a.moveTo(ARROWSIZE, - ARROWSIZE);
    a.lineTo(0, 0);
    a.lineTo(ARROWSIZE, ARROWSIZE);
    final translateM = Float64List.fromList([
        1,             0,     0, 0,
        0,             1,     0, 0,
        0,             0,     1, 0,
        offset.dx, offset.dy, 0, 1]
    );
    final rotateM = Float64List.fromList([
       cos(alpha), sin(alpha), 0, 0,
      -sin(alpha), cos(alpha), 0, 0,
           0,         0,       1, 0,
           0,         0,       0, 1]
    );
    final b = a.transform(rotateM);
    final c = b.transform(translateM);

    return c;

  }
Run Code Online (Sandbox Code Playgroud)