2010-06-01 16 views
7

कृपया नीचे दिए गए मेरे त्वरित आरेख का संदर्भ लें।गुम समन्वय। बेसिक त्रिकोणमिति सहायता

जो मैं करने की कोशिश कर रहा हूं वह लाल बिंदुओं के ज्ञात निर्देशांक से कोण का उपयोग करके पीले बिंदुओं के निर्देशांक प्राप्त कर रहा है। मानते हैं कि प्रत्येक पीला बिंदु x: 50/y: 250 लाल बिंदु से दाएं कोण पर लगभग 20 पिक्सल दूर है (मुझे लगता है कि यह वही है जिसे मैं बुलाया जाता हूं) मैं उनके निर्देशांक कैसे प्राप्त करूं?

मुझे विश्वास है कि यह बहुत ही बुनियादी त्रिकोणमिति है और मुझे Math.tan() का उपयोग करना चाहिए, लेकिन उन्होंने हमें कला विद्यालय में बहुत गणित नहीं सिखाया।

alt text http://www.freeimagehosting.net/uploads/e8c848a357.jpg

+0

क्या यह आपकी सभी समस्याओं के लिए सच है कि उन्हें 45 डिग्री से गठबंधन किया जाएगा? –

+0

क्षमा करें, सुनिश्चित नहीं है कि आप क्या पूछ रहे हैं। गणित वास्तव में मेरा मजबूत सूट नहीं है। उपरोक्त आरेख में, x: 200, y: 100 एक एंकर पॉइंट के रूप में कार्य करेगा। जब आरेख घूर्णन हो रहा है, तो मैं लाल बिंदुओं के कोण के कोण के बावजूद पीले बिंदुओं के निर्देशांक प्राप्त करने के लिए सूत्र को जानना चाहता हूं। मुझे उम्मीद है कि इसका कोई अर्थ है। – TheDarkIn1978

+0

आह, इसलिए यह उस कोण के लिए तय नहीं है। ठीक है, घुमावदार वेक्टर समाधान लिखने का समय! –

उत्तर

7

आप वास्तव में इस एक के लिए trigs जरूरत नहीं है। बस ढलानों का उपयोग करें, या x और y में बदलें।

ढलान m = y/x की एक पंक्ति को देखते हुए, कि लाइन के लिए लम्ब ढलान -1/m, या -x/y है।

लाल बिंदुओं के बीच ढलान मीटर -150/150, या -1/1 है। मैंने आपके सकारात्मक y अंक नीचे दिये।

इसलिए, सकारात्मक ढलान 1/1 है। आपके एक्स और वाई दोनों एक ही गति के साथ एक ही गति से बदलते हैं।

एक बार जब आप उसे जानते हैं, तो बाकी को समझना बहुत आसान होना चाहिए। चूंकि वे 45 डिग्री कोण पर गठबंधन हैं, 45-45-90 त्रिकोण का किनारा अनुपात 1 : 1 : sqrt(2) है। तो यदि आपकी लंबाई 20 है, तो व्यक्तिगत एक्स और वाई परिवर्तन 20/sqrt(2) होगा, या लगभग 14 पूर्णांक में होगा।

तो, आपके दो पीले बिंदु (36, 236), और (64, 264) पर होंगे। यदि लाइनों को सुविधाजनक डिग्री से गठबंधन नहीं किया गया है, तो आपको arctan() या कुछ समान उपयोग करना होगा, और रेखा और क्षैतिज रेखा के बीच कोण प्राप्त करना होगा, ताकि आप एक्स और वाई परिवर्तन के अनुपात को समझ सकें।

मुझे आशा है कि मेरा जवाब पालन करना बहुत कठिन नहीं था। अधिक सामान्य समाधान के लिए, ट्रॉबडॉर का जवाब देखें।


संपादित करें: के बाद से ओ पी ने कहा कि कम लाल डॉट वास्तव में ऊपरी लाल डॉट के चारों और घूमती है, हम बजाय एक अधिक लचीला समाधान की आवश्यकता होगी।

मैं इस उत्तर को ट्राउबडॉर से विस्तारित करने जा रहा हूं, क्योंकि मैं बिल्कुल वही कर रहा हूं। जैसा कि आपने मेरा पढ़ा है, कृपया उसकी पोस्ट देखें।

1. घूर्णन बात करने के लिए मूल से वेक्टर (200, 100) (50, 250) प्राप्त करें:

vector = (200 - 50, 100 - 250) = (150, -150) 

2. x और y को स्वैप करके अपने वेक्टर घुमाएँ, और एक्स नकारना नए वेक्टर पाने के लिए:

vector = (150, -150) => swap => (-150, 150) => negate x => (150, 150) 

3। नए वेक्टर से (लंबाई 1 से) इकाई वेक्टर प्राप्त करें:

vector = vector/length(vector) 
     = (150/length(vector), 150/length(vector)) 
     ~= (0.7071, 0.7071) 

     where 

     length(vector) = sqrt(150^2 + 150^2) ~= 212.2320 

4. , लंबाई 20 के विस्थापन वेक्टर जाओ इकाई वेक्टर गुणा करके। करने के लिए/इस सदिश

displacement_vector = vector * 20 
        = (0.7071 * 20, 0.7071 * 20) 
        = (14.1421, 14.1421) 

5. जोड़ें/घटाएँ अपने घूर्णन वेक्टर (बिंदु) से:

yellow_1 = (50, 250) + (14.1421, 14.1421) ~= (64, 254) 
yellow_2 = (50, 250) - (14.1421, 14.1421) ~= (36, 236) 

मुझे आशा है कि ऊपर के चरणों को अपने कोड तैयार करने में आपकी मदद। कोई फर्क नहीं पड़ता कि कोण क्या है, वही कदम।

+0

आप कहते हैं कि आपको ट्रिगर की आवश्यकता नहीं है , तो आर्कटान का उपयोग करने का सुझाव दें ... –

+1

मैंने कहा "आपको वास्तव में इस के लिए ट्रिग की आवश्यकता नहीं है", और "यदि लाइनों को सुविधाजनक डिग्री से गठबंधन नहीं किया गया है ..." कृपया मेरे शब्दों को संदर्भ से बाहर न लें । संपादित बिट के लिए '=]' –

+1

+1।इम्हो वेक्टर वास्तव में यहां जाने का तरीका है कि आपको केवल विशेष मामले की आवश्यकता है या नहीं। –

1

यदि आप जानते हैं कि यह 45 डिग्री पर रहने जा रहा है तो यह काफी आसान है। यदि 50 से 250 की दूरी 20 है, तो बिंदु (50 - (20*sqrt(2)), 250 - (20*sqrt(2))) और (50 + (20/sqrt(2)), 250 + (20/sqrt(2))) पर हैं।

आम तौर पर, 20*sqrt(2) प्रत्येक का हिस्सा (distance)*cos(angle) और distance*sin(angle) के साथ प्रतिस्थापित किया जाना चाहिए। एक एक्स समन्वय के लिए है और एक y समन्वय के लिए है। (जिस कोण से आप कोण को मापते हैं उसके आधार पर!)

संक्षेप में, आपको पाप और कॉस का उपयोग करना चाहिए। 45 डिग्री एक विशेष मामला है जहां पाप और कॉस 1/sqrt(2) दोनों हैं, इसलिए इससे कोई फर्क नहीं पड़ता कि आप किस तरह से उनका उपयोग करते हैं।

2

चूंकि पीले बिंदु लाल-लाल रेखा से दाएं कोण पर बंद होते हैं, तो आप कुछ सरल उपयोग कर सकते हैं। मैं पूरे प्रश्न का उत्तर नहीं दूंगा लेकिन मैं कुछ सुराग देने की कोशिश करूंगा:

पीले बिंदुओं की वास्तविक दूरी को अनदेखा करते हुए, उसी एनडब्ल्यू-एसई लाइन पर कुछ अन्य बिंदुओं की कल्पना करें, उसी दूरी पर एनई लाल डॉट। उस के लिए वेक्टर बस लाल बिंदु के वेक्टर है, घुमावदार 90 डिग्री।

निर्देशांक स्वैप करके और उनमें से एक को बदलकर 90 डिग्री से घूर्णन किया जा सकता है।

एक बार आपके पास यह हो जाने के बाद, वास्तविक दूरी (20) द्वारा उस वेक्टर को स्केल करके उस पीले बिंदु को अपनी नजदीकी स्थिति में ले जाएं।

4

कॉल पर लाल डॉट (50, 250) एक और कम एक (200, 100) बी

एक तरह से पहले वेक्टर एबी यानी

v_AB = (200 - 50, 100 - 250) = (150, -150) 

आप कर सकते हैं गणना करने के लिए किया जाएगा घटकों को स्वैप करके और दो घटकों में से किसी एक के संकेत को उलटकर उस पर दाएं कोणों पर वेक्टर उत्पन्न करें। तो

v_AB_perp = (150, 150) 

एक वेक्टर है जो आप स्क्रीन पर इसे देखते हुए v_AB घड़ी की दिशा में घुमाकर घूमते हैं। आप इस सामान्य परिमाण द्वारा के माध्यम से विभाजित करके एक इकाई वेक्टर प्राप्त करने के लिए कर सकते हैं अर्थात

v_AB_perp_normalised = v_AB_perp/|v_AB_perp| 

प्राप्त करने के लिए पीला अंक सिर्फ अपने 20 पिक्सल द्वारा इस गुणा और जोड़/ए के समन्वय के लिए उस पर घटाना

+1

+1। घुमावदार वैक्टर एक बेहतर, सामान्य समाधान है। –

+2

मुझे लगता है कि ओपी को पता नहीं चलेगा कि | जेड | = sqrt (Z.x * Z.x + Z.y * Z.y) –

+0

@jk: हे, मैंने इसे "वेक्टर की लंबाई" के रूप में पढ़ा है, लेकिन इसे इंगित करने के लिए धन्यवाद। –

2

यह काम करना चाहिए (मैं तो बस सबसे बाईं ओर पीले बिंदु का उल्लेख करेंगे, लेकिन हम अंत में दोनों के निर्देशांक मिल जाएगा):

  1. द्वारा दिए गए लाइन की ढलान का पता लगाएं दो लाल अंक
  2. पीले बिंदु और लाल बिंदु (डी 2) के बीच की रेखा का समीकरण खोजें।

    ढलान खोजें::

  3. लाइन समीकरण d2 और तथ्य यह है सबसे कम लाल बिंदु से दूरी है कि 20.

के लिए 1 का उपयोग करके पीला अंक के निर्देशांक खोजें m = (y1 - y2)/(x1 - x2) = (250 - 100)/(50 - 200) = 150/-150 = -1

के लिए 2:

हम उसपता(लाल बिंदुओं के बीच की रेखा) d2 (लाल बिंदु और पीले बिंदु के बीच की रेखा) पर लंबवत है, और इसलिए उनकी ढलानों का उत्पाद -1 होना चाहिए। इसलिए, d2 की ढलान m = 1

है इसलिए समीकरण है: d2: y - 250 = x - 50 => d2: y - x = 200

3 के लिए:

आवश्यक पीले बिंदु लाइन d2 पर स्थित है, और सबसे कम लाल बात करने के लिए इसकी दूरी है 20। समीकरणों के सिस्टम का समाधान:

y - x = 200 
(x - 50)^2 + (y - 250)^2 = 400 

गणना बहुत बदसूरत हो जाता है, लेकिन mathematica साथ इसे सुलझाने देता है:

{{x -> 35.8579, y -> 235.858}, {x -> 64.1421, y -> 264.142}}

वहीं अपने दो पीले अंक झूठ है!

प्रोग्रामेटिक रूप से, आप दूसरे समीकरण में y = 200 + x को प्रतिस्थापित करके आसानी से इस तरह के सिस्टम को हल कर सकते हैं, फिर एक तरफ सब कुछ ले जाकर इसे एक वर्गबद्ध समीकरण के रूप में हल कर सकते हैं।

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