Vẫn còn trên sách Phát triển iOS BigNerdRanch.Bộ lọc thông thấp gia tốc kế
Trong chương Gia tốc kế, trước hết chúng thực hiện theo dõi gia tốc nhưng nó khá nhanh. Sau đó, họ đề nghị áp dụng một bộ lọc thông thấp với nó bằng cách thay đổi mã gốc:
- (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];
}
này: Câu hỏi
- (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];
}
Khá đơn giản: nơi nào họ nhận được những giá trị này từ đâu? Tôi đã tìm kiếm thông qua các tài liệu hướng dẫn và tôi thấy một cái gì đó về các bộ lọc thông thấp, điều này cho thấy đoạn mã sau:
#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.
}
Tuy nhiên, lần đầu tiên tôi đã cố gắng với mã đó và tôi đã nhận ra lỗi (bằng cách phân tích ứng dụng của tôi) nói 'giá trị còn lại của' * 'là giá trị rác'. Theo dõi gia tốc của tôi cũng không hoạt động.
Tôi khá bối rối về ý nghĩa của những giá trị này. Ví dụ, trong phần đầu của mã, tại sao chúng nhân các giá trị gia tốc lên 10? Để có được một phong trào 'lớn hơn'? Tôi có thể làm cho một số ý nghĩa ra khỏi đó, nhưng mã thứ hai với bộ lọc thông thấp làm cho hoàn toàn không có ý nghĩa với tôi.
Tôi nghĩ lý do nhân với 10 là UIAcceleration mang lại cho bạn các giá trị trở lại trong G mà 1G là 9,81 m/s/giây. 10 là xấp xỉ 9,81. – SDJMcHattie