एक वृत्त पर एक बिंदु दिए गए रेडियन में कोण प्राप्त करें


14

मैं एक डायल पर काम कर रहा हूं जो एक सर्कल के चारों ओर घूमता है।

क्लिक करने से पहले

इस डायल में आपको एक सर्कल में किसी भी बिंदु पर क्लिक के रूप में एक ही कोण के साथ सर्कल के एक बिंदु को समायोजित करने के लिए आपको कहीं भी मूसमव करने देना चाहिए। उदाहरण के लिए, ऊपर दिए गए डायल से यदि आप नीचे गुलाबी रंग में दिखाए गए स्थान पर क्लिक करते हैं तो मैं डायल को उस बिंदु से ऊपर ले जाऊंगा लेकिन वृत्त पर।

क्लिक के बाद (गुलाबी)

मुझे पता है कि एक त्रिज्या और एक कोण (त्रिज्या में) पर दिए गए बिंदु पर एक बिंदु की स्थिति कैसे प्राप्त करें। यह सूत्र है :

x = Cos(angle) * radius + CenterX;
y = Sin(angle) * radius + CenterY;

हालांकि, मैं इसके विपरीत कुछ करने की तलाश कर रहा हूं - मुझे एक क्लिक बिंदु मिला है, जिसे मैं एक सर्कल में एक बिंदु में बदलना चाहता हूं (जहां नियंत्रण घुंडी चला जाता है)। मैं इस बिंदु (और एक दी गई त्रिज्या) का उपयोग करने की कोशिश कर रहा हूं ताकि इसके लिए रेडियन में कोण का पता लगाया जा सके, ताकि मैं उसी कोण पर सर्कल पर नियंत्रण घुंडी को रख सकूं।

वहाँ एक आसान सूत्र है जो मैं इसे पूरा करने के लिए उपयोग कर सकता हूं?


क्या आप बिंदुओं के बीच कोण प्राप्त करने के सूत्र की तलाश कर रहे हैं?
विलियम मैरीजर

क्या आप दो बिंदुओं के बीच एक कोण प्राप्त कर सकते हैं? मैं ढलान की गणना कर सकता हूं लेकिन मेरा अनुमान था कि मुझे एक त्रिकोण बनाने और इसे हल करने के लिए एक व्युत्क्रम त्रिकोणमितीय फ़ंक्शन का उपयोग करने के लिए तीसरे बिंदु की आवश्यकता है।
संपादक

मैंने एक उत्तर पोस्ट किया कि यह कैसे करना है।
विलियम मैरिजेर

3
आपके पास वास्तव में यहाँ क्या है, दो वैक्टरों के बीच का कोण है । वे दोनों वृत्त के केंद्र से उत्पन्न होते हैं और एक ही परिमाण (वृत्त की त्रिज्या) होते हैं।
MichaelHouse

यहाँ इसके पीछे का गणित है: उलटा ट्रिगर कार्यatanके लिए कम है arctan, और atan2यह केवल एक फ़ंक्शन है जो व्यक्तिगत तर्कों को स्वीकार करता है, और आपके लिए विभाजन करता है।
वॉइसथोस

जवाबों:


25

की जाँच करें atan2 कार्य करते हैं।

यह आपको (0, 0) और (x, y), xऔर yफ़ंक्शन तर्कों के बीच का कोण देता है।

संपादित करें: यदि सर्कल का केंद्र (0, 0) नहीं है, तो कोई बात नहीं, बस ऐसा करें atan2(y - cy, x - cx):।


क्या फर्क पड़ता है अगर मेरे सर्कल का केंद्र नहीं है (0,0)? मैं अनुमान लगा रहा हूं कि मैं atan2नीचे दिए गए तर्कों को केवल @Luis द्वारा दर्शाया गया हूं?
संपादक

बस घटाकर अनुवाद करें। संपादन देखें।
jcora

3
-1: atan2 का पहला पैरामीटर हैy
लुइस एस्ट्राडा

2
धन्यवाद @LuisEstrada, मैंने अभी इसे ठीक किया है। (उम्मीद है कि आप इसे +1 करेंगे। :))
jcora

+ लुइस एस्ट्राडा ने nnecro-bump को इसके लिए खेद है, लेकिन मुझे आपको धन्यवाद देना पड़ा। मैं डेढ़ दिन से अपने कार्यक्रम को समाप्त करने की कोशिश कर रहा हूं। यह पता चला है, तर्क atan2पिछड़े हुए थे!
Carcigenicate

8

आपको atan2 फ़ंक्शन के साथ घुंडी के केंद्र और कर्सर के बिंदु की आवश्यकता है । आप इसे इस तरह उपयोग करते हैं:

 angle = atan2(mouseY - knobCenterY, mouseX - knobCenterX)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.