2012-04-27 23 views
18

में मॉड ऑपरेटर आईओएस में एक मॉड ऑपरेटर की तलाश कर रहा है, जैसे कि % सी में, लेकिन इसे खोजने में कोई भाग्य नहीं है। इस link में उत्तर का प्रयास किया लेकिन यह वही त्रुटि देता है। मेरे पास एक फ्लोट वेरिएबल 'रोटेशनएंगल' है जिसका कोण उपयोगकर्ता उंगली आंदोलन के आधार पर बढ़ता या घटता रहता है। इस तरह कुछ बात:आईओएस

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

मैं सिर्फ इतना है कि rotationAngle doesnot +/- 360 सीमा पार सुनिश्चित करने की आवश्यकता। कोई भी शरीर किसी भी मदद करता है। धन्यवाद

+3

एएच, उद्देश्य-सी सी से फैली हुई है इसलिए सी का '%' ऑपरेटर भी उद्देश्य-सी में काम करता है। ** हालांकि ** फ्लोट '%' नहीं कर सकता है, इसलिए आपको इसे पहले int बनाना होगा। –

उत्तर

40

का उपयोग आप (float के लिए) गणित की fmod और fmodf (double के लिए) का उपयोग कर सकते चाहते हैं। एच:

#import <math.h> 

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

धन्यवाद लेकिन यह गणित आयात किए बिना काम कर रहा है, यह भी बहुत छोटा और सटीक है। – nuteron

1

मैं एक पूर्णांक पहले

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

करने के लिए इसे डाली आप अधिक सटीकता

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

यह निश्चित रूप से कम से कम कुछ सटीकता खो देगा। –

+0

मुझे लगता है कि जब तक आप इसे स्पेसशिप के लिए यात्रा की दिशा में प्रवेश करने के लिए उपयोग नहीं कर रहे हैं, तब तक चिंता करने के लिए पर्याप्त नहीं लगता है। अगर यह किसी भी चुड़ैल पर किसी को खो देता है तो मुझे नहीं लगता कि यह होगा, कोई गोलाकार, कास्टिंग या विवेक नहीं है, इसलिए यह नहीं होगा। –

12

fmod फ़ंक्शन का उपयोग करें, जो परिभाषा के लिए एक फ्लोट-पॉइंट मॉड्यूलो करता है, यहां देखें: http://www.cplusplus.com/reference/clibrary/cmath/fmod/। यह कैसे काम करता (वापसी मूल्यों के साथ) के उदाहरण:

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 

fmodf तर्कों के रूप "फ्लोट" लेता है, fmod "डबल" लेता है और fmodl "डबल लंबे" लेता है, लेकिन वे सभी एक ही काम करते हैं।

+0

आपके उत्तर के लिए यह काम धन्यवाद, उद्देश्य सी बहुत विविध है, एक बार जब आप [self methodName: पैरामीटर] जैसी विधि को कॉल करते हैं, तो अगली पंक्ति आप methodName (पैरामीटर) जैसी विधि को कॉल करते हैं .. – nuteron