2012-03-08 7 views
5

मुझे कुछ बुनियादी ट्रिगर के साथ थोड़ा परेशानी हो रही है। मैं कुछ गणित गृहकार्य कर रहा हूं, और अंत में मैं आयताकार निर्देशांक को ध्रुवीय निर्देशांक में परिवर्तित करने के ऊब गया और इसके विपरीत, इसलिए मैंने रूपांतरण के साथ मेरी सहायता करने के लिए थोड़ा पाइथन प्रोग्राम चाबुक करने का फैसला किया। हालांकि, Math.atan() मुझे थोड़ा परेशानी दे रहा है। कोड यह रहा:।बेसिक ट्रिग: math.atan() मुद्दा

def rect_to_polar_input(x, y): 
    hypotenuse = math.sqrt((x * x) + (y * y)) 
    tangent = float(y/x); 
    angle = round(math.degrees(math.atan(tangent))); 

    if x <= 0: 
     if(y >=0): 
      angle += 90 

     if(y <= 0): 
      angle+= 180 

    if x >= 0: 
     if(y<0): 
      angle+=270 

    return hypotenuse, angle 

मामले आप सोच रहे हैं क्यों मैं वहाँ में उन भद्दा if बयान होता है, इससे वृत्त का चतुर्थ भाग आयताकार निर्देशांक में हैं के लिए सही कोण को जोड़ने के लिए है चक्र 2 चक्र से 90 डिग्री की दूरी पर है 1, और क्वाड्रंट 3 क्वाड्रंट 1 से 180 डिग्री है, आदि

अब, यदि मैं (5, 5) जैसे मान दर्ज करता हूं, तो सब कुछ अपेक्षित काम करता है। हालांकि, अगर मैं (-5, 5) दर्ज करता हूं, तो मुझे 7.07, 45 का मान मिलता है, जहां मुझे 7.07, 135 मिलना चाहिए। अगर मैं (-5, -5) दर्ज करता हूं, तो मुझे 7.07, 225 का मान मिलता है, जिसकी अपेक्षा की जाती है। अंत में, अगर मैं (5, -5) का मान दर्ज करता हूं, तो मुझे अभी भी 7.07, 225 का मान मिलता है। मैंने जो कुछ भी सोच सकता हूं उसकी कोशिश की है, लेकिन यह काम नहीं कर रहा है। तो मुझे क्या याद आ रही है?

उत्तर

12

इसके लिए आपको atan2 का उपयोग करना चाहिए। यह आपको वांछित quadrants के साथ सौदा करता है। इसलिए जैसा:

def rect_to_polar_input(x, y): 
    hypotenuse = math.hypot(x, y) 
    angle = round(math.degrees(math.atan2(y, x))) 
    if angle<0: 
     angle += 360 
    return hypotenuse, angle 

if बयान तथ्य यह है कि आप रेंज 0..360 में परिणाम चाहते हैं से निपटने के लिए है, लेकिन atan2 रेंज -180..180 में कोण प्रदान करता है।

आप इसे ले गए मूल दृष्टिकोण का उपयोग करके atan के साथ ऐसा कर सकते हैं, लेकिन आपने इसे अभी तक डिबग नहीं किया है। किसी भी मामले में, हर कोई इस के लिए atan2 का उपयोग करता है।

इसके अलावा, आप अपने आप को रोल करने के बजाय hypot का भी उपयोग कर सकते हैं।

+0

हाँ, यह किया, धन्यवाद! प्रतीक्षा के लिए माफ़ी। –

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