iphonesdk حساب زاوية الدوران من catransform3d
-
01-10-2019 - |
سؤال
كيف يمكنني حساب الدوران في الراديان حول المحور z عن طريق إعطاء بنية catransform3d كمدخل؟
في الأساس ما أحتاجه هو العكس CATransform3DMakeRotation
.
المحلول
يعتمد ذلك على المحور الذي تقوم به بالتناوب.
يتم تمثيل الدوران حول المحور z على النحو التالي:
a = angle in radians
x' = x*cos.a - y*sin.a
y' = x*sin.a + y*cos.a
z' = z
( cos.a sin.a 0 0)
(-sin.a cos.a 0 0)
( 0 0 1 0)
( 0 0 0 1)
لذلك يجب أن تكون الزاوية a = atan2 (transform.m12 ، transform.m11) ؛
الدوران حول المحور السيني:
a = angle in radians
y' = y*cos.a - z*sin.a
z' = y*sin.a + z*cos.a
x' = x
(1 0 0 0)
(0 cos.a sin.a 0)
(0 -sin.a cos.a 0)
(0 0 0 1)
الدوران حول المحور ص:
a = angle in radians
z' = z*cos.a - x*sin.a
x' = z*sin.a + x*cos.a
y' = y
(cos.a 0 -sin.a 0)
(0 1 0 0)
(sin.a 0 cos.a 0)
(0 0 0 1)
نصائح أخرى
إذا تم إرفاق التحويل بطبقة ، فيمكنك الحصول على قيمة الدوران مثل التالية:
CGFloat angle = [(NSNumber *)[layer valueForKeyPath:@"transform.rotation.z"] floatValue];
من توثيق:
تقوم الرسوم المتحركة الأساسية بتوسيع بروتوكول ترميز القيمة الرئيسية للسماح بالحصول على القيم المشتركة لمصفوفة Catransform3D للطبقة من خلال مسارات رئيسية. يصف الجدول 4 المسارات الرئيسية التي تكون خصائص تحويل الطبقة وطبقة الطبقة الفرعية هي ترميز القيمة الرئيسية ومراقبة متوافقة
لا تنتمي إلى StackOverflow