2012-03-13 12 views
7
- (float)angleFromCoordinate:(CLLocationCoordinate2D)first toCoordinate:(CLLocationCoordinate2D)second { 

//first is origin 

//second is point 

float longitudinalDifference = second.longitude - first.longitude; 
float latitudinalDifference = second.latitude - first.latitude; 
float possibleAzimuth = (M_PI * .5f) - atan(latitudinalDifference/longitudinalDifference); 

if (longitudinalDifference > 0) 
{ 
    return possibleAzimuth; 
} 
else if (longitudinalDifference < 0) 
{ 
    return possibleAzimuth + M_PI; 
} 
else if (latitudinalDifference < 0) 
{ 
     return M_PI; 
    } 

    return 0.0f; 
} 

उपरोक्त कोड (ओपन सोर्स आर्किट प्रोजेक्ट से लिया गया) एक बिंदु के बिंदु से मूल बिंदु (उपयोगकर्ता स्थान) तक कोण को गणना करता है।बढ़ी वास्तविकता असर/शीर्षक/अजीमुथ भ्रम। (आईफोन एआरकेट कोड)

- (BOOL)viewportContainsCoordinate:(ARCoordinate *)coordinate { 

double centerAzimuth = self.centerCoordinate.azimuth; 
double leftAzimuth = centerAzimuth - VIEWPORT_WIDTH_RADIANS/2.0; 

if (leftAzimuth < 0.0) { 
    leftAzimuth = 2 * M_PI + leftAzimuth; 
} 

double rightAzimuth = centerAzimuth + VIEWPORT_WIDTH_RADIANS/2.0; 

if (rightAzimuth > 2 * M_PI) { 
    rightAzimuth = rightAzimuth - 2 * M_PI; 
} 

BOOL result = (coordinate.azimuth > leftAzimuth && coordinate.azimuth < rightAzimuth); //THIS LINE 

if(leftAzimuth > rightAzimuth) { 
    result = (coordinate.azimuth < rightAzimuth || coordinate.azimuth > leftAzimuth); 
} 

double centerInclination = self.centerCoordinate.inclination; 
double bottomInclination = centerInclination - VIEWPORT_HEIGHT_RADIANS/2.0; 
double topInclination = centerInclination + VIEWPORT_HEIGHT_RADIANS/2.0; 

//check the height. 
result = result && (coordinate.inclination > bottomInclination && coordinate.inclination < topInclination); 

//NSLog(@"coordinate: %@ result: %@", coordinate, [email protected]"YES":@"NO"); 

return result; 
} 

समस्या है मुझे नहीं समझ में पूरी तरह से कैसे यह विशेष रूप से काम करता है: दिगंश (शीर्षक) रेडियन में गणना, एआर एप्लिकेशन im इमारत में मैं निम्नलिखित कोड का उपयोग कर पता लगा सकते हैं कि क्या एक बिंदु अपने दृश्य पोर्ट के भीतर है को देखते हुए उस रेखा पर जहां यह जांचता है कि एक समन्वय (ब्याज बिंदु) अजीमुथ (शीर्षक) उत्पत्ति शीर्षक के बाएं और दाएं अजीमुथ बिंदुओं के बीच दृश्य पोर्ट सीमा में है।

तो मेरी गलतफहमी का उदाहरण देने के लिए - डिग्री में, यदि समन्वय (ब्याज बिंदु) 90 डिग्री की उत्पत्ति के लिए असर की गणना करता है, और उसके बाद मूल दृश्य पोर्ट 270 डिग्री के अपने असर पर इसका सामना कर रहा है समन्वय के लिए, इसका मतलब यह होगा कि उपयोगकर्ता बिंदु को देख रहा है, लेकिन मुझे नहीं पता कि कोड अभी भी क्यों काम करता है क्योंकि यह जांचता है कि समन्वय एजीमुथ असर उत्पत्ति व्यूपोर्ट के भीतर है या नहीं, जो मुझे लगता है कि उदाहरण होगा 250 - (270) - 2 9 0 डिग्री। और जाहिर है मूल उत्पत्ति के लिए निर्देशांक एजीमुथ 9 0 था इसलिए यह गलत होना चाहिए।

कोई भी मदद जो वास्तव में यहां हो रही है उसे समझने में बहुत मदद की जाती है।

उत्तर

0

मुझे लगता है कि आप की तरह

#define degreesToRadians(x) (M_PI * x/180.0) 

एक समारोह का उपयोग कर सकते हैं ताकि आप डिग्री और रेडियन के अनुसार और अधिक स्पष्ट कर रहे हैं। आशा है कि यह आपकी मदद करेगा ..