यदि आप करते हैं: y/x आपको लाइन की ढलान मिल जाएगी। आपको प्राप्त होने वाली संख्या के आधार पर आप कोण/ऑक्टेटेंट निर्धारित कर सकते हैं। => 90 डिग्री (उत्तर)
2.4> (y/एक्स)> 0.4 - - => 45 डिग्री सकारात्मक एक्स के (एक्स> 0)
- (y/एक्स)> 2.4 के लिए
(उत्तर पश्चिम)
- 0.4> (y/एक्स)> -0.4 - => 0 डिग्री (पश्चिम)
- -0.4> (y/एक्स)> -2.4 - => -45 डिग्री (दक्षिण पश्चिम)
- -2।4> (y/x) - => 90 डिग्री (दक्षिण)
और नकारात्मक एक्स के
और अंत के लिए एक समान सूची अपवाद मामलों:
- (एक्स == 0 & & y> 0) - => -90 डिग्री (दक्षिण)
- (एक्स == 0 & & y < 0) - => 90 डिग्री (दक्षिण)
परिशिष्ट: मैं केवल इस विधि की रिपोर्ट करता हूं जब एटान की गणना नहीं होती है (उदाहरण के लिए एम्बेडेड सिस्टम पर))
मुझे थोड़ा खोदना पड़ा। यहां एक अत्यधिक अनुकूलित दिनचर्या है जिसका उपयोग मैं करता हूं (मोबाइल गेम में उपयोग किया जाता है)।
इनपुट: x1, y1 = वेक्टर x2, y2 = वेक्टर के अंतिम बिंदु का startpoint निर्गम (0-7) = 0 = उत्तर, 1 = उत्तर पश्चिम, 2 = पश्चिम, ... आदि
int CalcDir(int x1, int y1, int x2, int y2)
{
int dx = x2 - x1, dy = y2 - y1;
int adx = (dx<0)?-dx:dx, ady = (dy<0)?-dy:dy, r;
r=(dy>0?4:0)+(dx>0?2:0)+(adx>ady?1:0);
r=(int []){2,3,1,0,5,4,6,7}[r];
return r;
}
void CalcDirTest(){
int t = CalcDir(0, 0, 10, 1);
printf("t = %d",t);
t = CalcDir(0, 0, 9, 10);
printf("t = %d",t);
t = CalcDir(0, 0, -1, 10);
printf("t = %d",t);
t = CalcDir(0, 0, -10, 9);
printf("t = %d",t);
t = CalcDir(0, 0, -10, -1);
printf("t = %d",t);
t = CalcDir(0, 0, -9, -10);
printf("t = %d",t);
t = CalcDir(0, 0, 1, -10);
printf("t = %d",t);
t = CalcDir(0, 0, 10, -9);
printf("t = %d",t);
}
यह निम्न उत्पादन में परिणाम होगा:
t = 7
t = 6
t = 5
t = 4
t = 3
t = 2
t = 1
t = 0
(परीक्षण के लिए वैक्टर देखो अजीब तरह से चुना हो सकता है, लेकिन मैं उन्हें फेरबदल सब थोड़ा स्पष्ट रूप से एक ओक्टांट में और सही सीमा पर नहीं होने के लिए)
इस तरीके से टैग करने के तरीके पर कोई विचार? नि: शुल्क महसूस करें ... –
नहीं, मेरे उत्तर में (1, 0) पूर्व है और यह घड़ी की दिशा में जा रहा है, क्योंकि मैं यहां गणितीय रूप से चीजें कर रहा हूं। यह नेविगेशन (0 = उत्तर, दक्षिणावर्त) में कोणों के मानक उपयोग के साथ बाधाओं पर है। आप इसे +8 पर उचित ऑफसेट जोड़कर और एटान 2 के सामने एक का उपयोग कर अनुकूलित कर सकते हैं। – starblue
स्टारब्लू को इंगित करने के लिए धन्यवाद, मैं अपने स्केच के साथ खुद को भ्रमित कर रहा हूं - आपका उत्तर स्पॉट पर है! –