Matrix 围绕自定义轴心点旋转
我真的不懂线性代数,因为这个问题,我正在努力学习它。 我敢肯定,对于那些懂线性代数的人来说,这是一个简单的问题 我将尝试解释并展示一些图片、视频和代码,以便更好地描述它 首先,乍一看,我的目标很简单。 就是创造 现在我设法做到了 正如你所看到的,我现在用“幻数”移动每个“页面”,我称之为幻数,因为我在线性代数方面非常在行,我在这里所做的是在我几乎没有理解的情况下+尝试和错误。显然不是正确的方式 我有一个delta,它基本上是从用户的delta中得到的一个偏移量 现在,我看到了这个立方体转换的所有示例,比如说在CSS中,它们只是旋转/转换了每一面。然后移动/旋转“摄影机”或我猜是父对象 我也尝试过这种方法: 像这样:Matrix 围绕自定义轴心点旋转,matrix,dart,flutter,linear-algebra,perspective,Matrix,Dart,Flutter,Linear Algebra,Perspective,我真的不懂线性代数,因为这个问题,我正在努力学习它。 我敢肯定,对于那些懂线性代数的人来说,这是一个简单的问题 我将尝试解释并展示一些图片、视频和代码,以便更好地描述它 首先,乍一看,我的目标很简单。 就是创造 现在我设法做到了 正如你所看到的,我现在用“幻数”移动每个“页面”,我称之为幻数,因为我在线性代数方面非常在行,我在这里所做的是在我几乎没有理解的情况下+尝试和错误。显然不是正确的方式 我有一个delta,它基本上是从用户的delta中得到的一个偏移量 现在,我看到了这个立方体转换的所有
Widget getWidget(Type type)
{
AlignmentGeometry alignmentGeometry;
Matrix4 matrix4;
switch (type)
{
case Type.PREVIOUS:
alignmentGeometry = FractionalOffset.center;
matrix4 = Matrix4.identity()
..setEntry(3, 2, 0.001) // perspective
..rotateY(-90.0 * math64.degrees2Radians)
..translate(deviceWidth / 2, 0.0, deviceWidth / 2);
break;
case Type.CURRENT:
alignmentGeometry = FractionalOffset.center;
matrix4 = Matrix4.identity()
..setEntry(3, 2, 0.001);
break;
case Type.NEXT:
alignmentGeometry = FractionalOffset.center;
matrix4 = Matrix4.identity()
..setEntry(3, 2, 0.001) // perspective
..rotateY(90.0 * math64.degrees2Radians)
..translate(-deviceWidth / 2, 0.0, deviceWidth / 2);
break;
}
return new Transform(
alignment: alignmentGeometry,
transform: matrix4,
child: new Container(
color: type == Type.NEXT ? Colors.green : type == Type.PREVIOUS ? Colors.red : Colors.black.withOpacity(0.5),
),
);
}
然后让我们简单地旋转父对象,对吗
Widget build(BuildContext context)
{
List<Widget> widgets = [];
widgets.add(getWidget(Type.PREVIOUS));
widgets.add(getWidget(Type.CURRENT));
widgets.add(getWidget(Type.NEXT));
return new Scaffold(
key: _scaffoldKey,
body: new Container(
color: Colors.black,
child: new GestureDetector(
child: new Container(
color: Colors.white,
child: new Transform(
alignment: FractionalOffset.center,
transform: Matrix4.identity()
..setEntry(3, 2, 0.0001)
..rotateY(45.0 * math64.degrees2Radians),
child: new Stack(
children: widgets,
),
)
),
)
)
);
}
小部件构建(构建上下文)
{
列表小部件=[];
add(getWidget(Type.PREVIOUS));
add(getWidget(Type.CURRENT));
add(getWidget(Type.NEXT));
归还新脚手架(
钥匙:_scaffoldKey,
主体:新容器(
颜色:颜色,黑色,
儿童:新的手势检测器(
子容器:新容器(
颜色:颜色,白色,
孩子:新的转变(
对齐:分馏loffset.center,
转换:Matrix4.identity()
..设置条目(3,2,0.0001)
..旋转(45.0*64度半径),
子:新堆栈(
孩子们:小部件,
),
)
),
)
)
);
}
否:
90度会让它消失
现在,我明白了,我需要一种“枢轴旋转点”,或者改变“原点”或“锚定点”,甚至不知道如何调用它
因此,为了描述它,让我们举例来说,我们也有一个底部。所以我想要底部的中心(比如说在立方体中)。所以它看起来是这样的:
现在,如果我在Y轴上旋转“原点”,我应该得到正确的动画,对吗
Widget build(BuildContext context)
{
List<Widget> widgets = [];
widgets.add(getWidget(Type.PREVIOUS));
widgets.add(getWidget(Type.CURRENT));
widgets.add(getWidget(Type.NEXT));
return new Scaffold(
key: _scaffoldKey,
body: new Container(
color: Colors.black,
child: new GestureDetector(
child: new Container(
color: Colors.white,
child: new Transform(
alignment: FractionalOffset.center,
transform: Matrix4.identity()
..setEntry(3, 2, 0.0001)
..rotateY(45.0 * math64.degrees2Radians),
child: new Stack(
children: widgets,
),
)
),
)
)
);
}