ios

2012-04-27 18 views
18

'daki Mod operatörü, ios'da bir mod operatörü arıyor, c gibi % gibi, ama bunu bulmakta hiç şans yok. Yanıtı bu link'da denedim, ancak aynı hatayı veriyor. Kullanıcı parmak hareketine bağlı olarak açısı artıyor veya azalıyor olan 'rotationAngle' float değişkeni var. Böyle Bazı şey:ios

if (startPoint.x < pt.x) { 
    if (pt.y<936/2) 
     rotationAngle += pt.x - startPoint.x; 
    else 
     rotationAngle += startPoint.x - pt.x; 
    } 
    rotationAngle = (rotationAngle % 360); 
} 

Sadece rotationAngle +/- 360 sınırını geçmeye etmediğinden emin olmak gerekir. Herhangi bir vücutta herhangi bir yardım. Daha doğruluk Sen matematik (float için) fmod ve fmodf (double için) kullanabilir

float t = rotationAngle-((int)rotationAngle); 
rotationAngle = (((int)rotationAngle) % 360); 
rotationAngle+=t; 
+3

Eh, Objective-C, C'den uzanır. Bu nedenle C'nin "%" operatörü de Objective-C'de çalışır. ** Bununla birlikte, ** floatlar '%' yapamazlar, bu yüzden önce bir int yapmak zorundasınız. –

cevap

40

kullanmak istiyorsanız Teşekkür

+1

Teşekkür ederim ama math.h ithal etmeden de çalışıyor, çok kısa ve hassas. – nuteron

1

Bir int ilk

rotationAngle = (((int)rotationAngle) % 360); 

için döküm. h:

#import <math.h> 

rotationAngle = fmodf(rotationAngle, 360.0f); 
+0

Bu elbette en azından bir kesinlik kaybedecek. –

+0

Bir uzay gemisi için seyahat yönüne girmek için kullanmıyorsanız, endişelenecek kadar bir şey düşünmüyorum. Eğer cadıyı kaybederse, bunun olacağını düşünmüyorum, yuvarlama, dökülme ya da tasavvur yoktur, bu yüzden olmayacaktır. –

12

Bir floating point modulo olan fmod işlevini kullanın, tanım için buraya bakın: http://www.cplusplus.com/reference/clibrary/cmath/fmod/. o (dönüş değerleri ile) nasıl çalıştığını örnekler:

fmodf(100, 360); // 100 
fmodf(300, 360); // 300 
fmodf(500, 360); // 140 
fmodf(1600, 360); // 160 
fmodf(-100, 360); // -100 
fmodf(-300, 360); // -300 
fmodf(-500, 360); // -140 

fmodffmod "çift" alır ve fmodl "çift uzun" alır, ama hepsi aynı şeyi yapar, argüman olarak "şamandıra" alır.

+0

Cevabınız için teşekkürler bu çalışma, nesnel c çok farklıdır, bir kez [self methodName: parameters] gibi bir yöntemi çağırırsanız, sonraki satır metodName (parameters) gibi bir yöntemi çağırırsınız. – nuteron