2012-07-08 10 views
8

मैं चुंबकीय उत्तर से डिवाइस में विचलन प्राप्त करना चाहता हूं, और उस कोड का उपयोग उस कोड में करें जिसका मैं लिख रहा हूं।कौन सा आईओएस वर्ग/कोड चुंबकीय उत्तर देता है?

मैं डिवाइस की स्थान सेवाओं का उपयोग नहीं करना चाहता हूं और इसलिए मुझे सही उत्तर प्राप्त करने में दिलचस्पी नहीं है बल्कि चुंबकीय उत्तर (केवल डिवाइस के चुंबकमीटर का उपयोग करके) में दिलचस्पी नहीं है।

कौन सी कक्षा (या कोडिंग प्रक्रिया ..) मुझे उस मूल्य (केवल मैग्नेटोमीटर पर भरोसा कर सकती है) प्रदान कर सकती है?

CLLocationManager वर्ग और उसके गुणों के स्थान सेवाओं पर भरोसा करते हैं सक्षम किया जा रहा/उपलब्ध

जहां इसकी CMMagnetometerData वर्ग के साथ कोर मोशन ढांचा निम्नलिखित संपत्ति के साथ हमें प्रदान करता है के रूप में:

@property(readonly, nonatomic) CMMagneticField magneticField 

A structure containing 3-axis magnetometer data 

typedef struct { 
    double x; 
    double y; 
    double z; 
} CMMagneticField; 

मैं कैसे मिलता है उसमें से डिग्री? या मैग्नेटोमीटर से डिग्री प्राप्त करने के लिए क्या कोई अन्य तरीका (वर्ग/संपत्ति/विधि) है?

उस मामले पर कुछ उपयोगी जानकारी वाले किसी भी व्यक्ति के लिए अग्रिम धन्यवाद! :)

उत्तर

12

iOS documentation बताता है कि सीएममैग्नेटिकफाइड डेटा कच्चा है, जिसका अर्थ यह है कि इसमें डिवाइस से और इसके आसपास के पूर्वाग्रह शामिल हैं। CMDeviceMotion फ़िल्टर किए गए समान चुंबकीय क्षेत्र मान प्रदान करता है।

चुंबकीय उत्तर निर्धारित करने के लिए आपको फ़िल्टर किए गए मानों का उपयोग करना चाहिए और डिवाइस को पृथ्वी की सतह के साथ स्तर रखना चाहिए।

चुंबकीय क्षेत्र के x और y मान कोण (डिग्री में चुंबकीय उत्तर से झुकाव) यह जानते हुए निम्नलिखित formula साथ गणना की जा सकती:

if (y>0): heading = 90.0 - [arcTan(x/y)]*180/π 
if (y<0): heading = 270.0 - [arcTAN(x/y)]*180/π 
if (y=0, x<0): heading = 180.0 
if (y=0, x>0): heading = 0.0 

Obj सी में, यह सोचते हैं कि आप एक CMMagnetometerData वस्तु है magnetometerData कहा जाता है, कि कुछ ऐसा दिखाई देगा:

double heading = 0.0; 
double x = magnetometerData.magneticField.x; 
double y = magnetometerData.magneticField.y; 
double z = magnetometerData.magneticField.z; 

if (y > 0) heading = 90.0 - atan(x/y)*180.0/M_PI; 
if (y < 0) heading = 270.0 - atan(x/y)*180.0/M_PI; 
if (y == 0 && x < 0) heading = 180.0; 
if (y == 0 && x > 0) heading = 0.0; 
+0

क्या होगा यदि मैं डिवाइस को पकड़ने के बावजूद चुंबकीय उत्तर प्राप्त करना चाहता हूं? जैसे आईफोन 4 एस पर डिजिटल कंपास चुंबकीय उत्तर (स्थान सेवाएं अक्षम) लौटाता है इस पर ध्यान दिए बिना कि मैं डिवाइस को कैसे पकड़ रहा हूं। मैं उसे कैसे प्राप्त कर सकता हूं? –

+0

आपके द्वारा सुझाए गए सूत्र वैध नहीं हैं उद्देश्य-सी –

+0

मैंने इसे वैध उद्देश्य-सी कोड में परिवर्तित कर दिया है, लेकिन मुझे हर समय 0 डिग्री मिलती है .. –

-2

आप सेंसर फ्यूज करने के लिए सेब अनुप्रयोगों की नकल करने की जरूरत है। वे जीरो एक्सेलेरोमीटर और मैग्नेटोमीटर का उपयोग करते हैं, और उन्नत गणित जिन्हें आप ऐसे साफ परिणामों का उत्पादन करना सीख सकते हैं या नहीं। सौभाग्य। आप शायद उन्हें नकल करने में सक्षम नहीं होंगे।

+1

क्या आपने प्रश्न पढ़ा है? कृपया ध्यान से जांचें कि लेखक क्या मांग रहा था। – Trinimon

संबंधित मुद्दे