我正在查看CATransform3DMakeRotation和CATransform3DRotate的官方文档,我无法理解它们的区别。有人使用try{
myArrayList.add(input.nextInt());
}catch(InputMismatchException e){
}
catch(NoSuchElementException e1){
}
catch(IllegalStateException e2){
}
和CATransform3DMakeRotation
哪里?
答案 0 :(得分:5)
您可以使用4 x 4矩阵表示各种3D变换,包括平移,缩放,旋转,倾斜和透视。
通过将表示每个单独变换的矩阵相乘,您可以在单个矩阵中表示多个连续变换。
CATransform3DMakeRotation
创建一个表示单个变换的矩阵:围绕给定轴旋转给定角度。
CATransform3DRotate
创建一个像CATransform3DMakeRotation
那样的矩阵,然后将该矩阵乘以另一个矩阵,从而将旋转添加到现有的变换序列中。
所以你真的只需要一个或另一个。如果你有一个,你可以很容易地定义另一个。
您可以使用CATransform3DRotate
这样写CATransform3DMakeRotation
:
func CATransform3DRotate(_ t: CATransform3D, _ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
let rotation = CATransform3DMakeRotation(angle, x, y, z)
return CATransform3DConcat(rotation, t)
}
CATransform3DConcat
返回两个矩阵的乘积。
或者您可以使用CATransform3DMakeRotation
这样写CATransform3DRotate
:
func myCATransform3DMakeRotation(_ angle: CGFloat, _ x: CGFloat, _ y: CGFloat, _ z: CGFloat) -> CATransform3D {
return CATransform3DRotate(CATransform3DIdentity, angle, x, y, z)
}
CATransform3DIdentity
是单位矩阵,根本不表示转换。
如果您想了解有关转换矩阵的更多信息,如何构建和组合转换矩阵,以及为什么需要4x4矩阵进行3D转换,请在您最喜爱的搜索引擎中输入homogeneous coordinates 3d
。
答案 1 :(得分:2)
CATransform3DMakeRotation
创建了一个新的转换。
CATransform3DRotate
获取现有变换并旋转它。
如果你只想尝试旋转,那真的不一样。但是如果你需要缩放,然后旋转,然后翻译,那么最后可能会有所不同。