अभी भी BigNerdRanch आईओएस विकास पुस्तक पर।एक्सेलेरोमीटर कम पास फ़िल्टरिंग
एक्सेलेरोमीटर अध्याय में, वे पहले एक्सेलेरोमीटर ट्रैकिंग को लागू करते हैं लेकिन यह काफी अजीब है।
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
[hv setXShift:10.0 * [acceleration x]];
[hv setYShift:10.0 * [acceleration y]];
[hv setNeedsDisplay];
}
इस के लिए
:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
HypnosisView *hv = (HypnosisView *)[self view];
float xShift = [hv xShift] * 0.8 + [accel x] * 2.0;
float yShift = [hv yShift] * 0.8 + [accel y] * 2.0;
[hv setXShift:xShift];
[hv setYShift:yShift];
[hv setNeedsDisplay];
}
काफी सरल प्रश्न: वे कहां से इन मूल्यों को मिलता है वे तो मूल कोड को बदलकर इसे करने के लिए एक कम पास फिल्टर लागू करने के लिए सुझाव है? मैं प्रलेखन के माध्यम से देख रहा था और मैं लो-पास फिल्टर के बारे में कुछ है, जो निम्नलिखित कोड का सुझाव मिला:
#define kFilteringFactor 0.1
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to keep only the gravity component of each axis.
accelX = (acceleration.x * kFilteringFactor) + (accelX * (1.0 - kFilteringFactor));
accelY = (acceleration.y * kFilteringFactor) + (accelY * (1.0 - kFilteringFactor));
accelZ = (acceleration.z * kFilteringFactor) + (accelZ * (1.0 - kFilteringFactor));
// Use the acceleration data.
}
हालांकि, मैं पहली बार है कि कोड के साथ की कोशिश की और मैं एक त्रुटि मिल गया (मेरे एप्लिकेशन का विश्लेषण करके) कह रही है '*' का बायां मान एक कचरा मूल्य है '। मेरा एक्सेलेरोमीटर ट्रैकिंग या तो काम नहीं करता था।
मैं इन मूल्यों के अर्थ के रूप में काफी उलझन में हूं। उदाहरण के लिए, कोड के पहले भाग में, वे त्वरण मानों को 10 से गुणा क्यों करते हैं? 'बड़ा' आंदोलन प्राप्त करने के लिए? मैं उसमें से कुछ समझ सकता था, लेकिन कम पास फ़िल्टर वाला दूसरा कोड मुझे बिल्कुल समझ में नहीं आता है।
मुझे लगता है कि 10 से गुणा करने का कारण यह है कि यूआईसीक्लेरेशन आपको जी में मूल्य वापस देता है जो 1 जी प्रति सेकेंड 9.81 मीटर प्रति सेकंड है। 10 9.81 का अनुमान है। – SDJMcHattie