का उपयोग कर ग्राउंड प्लेन के सापेक्ष डिवाइस प्लेन प्राप्त करें मान लें कि आईफोन एक फ्लैट टेबल पर रखा गया है। मैं टेबलटॉप विमान के कोण को निर्धारित करना चाहता हूं, जहां 0 का कोण यह होगा कि तालिका गुरुत्वाकर्षण वेक्टर के लिए बिल्कुल लंबवत है। मैं निम्न सूत्र का उपयोग कर रहा:एक्सेलेरोमीटर
radians = atanf (z/sqrt (x^2 + y^2)
ज
double accelerationXAverage;
double accelerationYAverage;
double accelerationZAverage;
double accelerationXSum;
double accelerationYSum;
double accelerationZSum;
int readingsCount;
में मीटर
#define kThresholdMovementHigh 0.05
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration
{
// did device move a lot? if so, reset sums
if (fabsf(acceleration.x - accelerationXAverage) > kThresholdMovementHigh ||
fabsf(acceleration.y - accelerationYAverage) > kThresholdMovementHigh ||
fabsf(acceleration.z - accelerationZAverage) > kThresholdMovementHigh )
{
NSLog(@"deviceDidMove a lot");
accelerationXSum = acceleration.x;
accelerationYSum = acceleration.y;
accelerationZSum = acceleration.z;
readingsCount = 1;
}
else
{
// because the device is at rest, we can take an average of readings
accelerationXSum += acceleration.x;
accelerationYSum += acceleration.y;
accelerationZSum += acceleration.z;
readingsCount ++;
}
accelerationXAverage = accelerationXSum/readingsCount;
accelerationYAverage = accelerationYSum/readingsCount;
accelerationZAverage = accelerationZSum/readingsCount;
float angle = RadiansToDegrees(atanf(accelerationZAverage/sqrtf(pow(accelerationXAverage, 2) + pow(accelerationYAverage, 2)))) + 90;
labelAngle.text = [NSString stringWithFormat:@"%.2f°", angle];
}
मैं accelerometer रीडिंग औसत से शोर को छान कर रहा हूँ में। एक्सीलरोमीटर अपडेट अंतराल 1/60 है, और अब प्रयोग करते समय, मैंने डिवाइस को 10 सेकंड तक बैठने दिया है (इसलिए यह 600 रीडिंग का औसत है)।
यह सूत्र काम पर प्रतीत होता है, यह मुझे उम्मीद करता है कि मुझे क्या उम्मीद है। हालांकि, मैं यह भी उम्मीद कर रहा हूं कि अगर मैं टेबलटॉप पर अभी भी फ्लैट के दौरान एक अलग स्थिर स्थिति में घुमाए गए डिवाइस के साथ कोशिश करता हूं, तो मुझे एक ही जवाब मिलना चाहिए (गुरुत्वाकर्षण वेक्टर के सापेक्ष कारण, कोण नहीं बदला है) । हालांकि, जब मैं इसे आज़माता हूं तो मुझे वह नहीं मिलता है। कोण कुछ डिग्री से भिन्न होते हैं।
मैं सही सूत्र का उपयोग कर रहा हूं? एक ही टेबलटॉप पर कोण अलग-अलग प्लेसमेंट के लिए क्यों भिन्न होगा? क्या यह सिर्फ त्रुटि का मार्जिन है?
मैंने यह सुनिश्चित करने के लिए एक छवि (http://gotoandplay.freeblog.hu/ से) जोड़ दी है कि मैं एक ही एक्स-वाई- और जेड-अक्ष के बारे में बात कर रहा हूं।
में kThresholdMovementHigh पर त्रुटि हो रही है। यह – srinadh
kThresholdMovementHigh केवल एक स्थिर है। दहलीज के नीचे "शोर" है - यानी, वह आंदोलन जिसे आप अनदेखा करना चाहते हैं। दहलीज के ऊपर वह आंदोलन है जिसे आप उपयोगकर्ता द्वारा जानबूझकर आंदोलन के रूप में संसाधित करना चाहते हैं। मैंने अपना #define शामिल करने के लिए अपना प्रश्न अपडेट कर लिया है। आपको यह निर्धारित करना होगा कि आपके ऐप के लिए इष्टतम क्या है। –