سؤال

كيف يمكنني حساب الدوران في الراديان حول المحور 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 المسارات الرئيسية التي تكون خصائص تحويل الطبقة وطبقة الطبقة الفرعية هي ترميز القيمة الرئيسية ومراقبة متوافقة

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top