g o l f t a n 2


18

कभी-कभी यह वास्तव में कार्टेशियन निर्देशांक (x,y)को ध्रुवीय निर्देशांक में बदलने के लिए एक संघर्ष है (r,phi)। आप की गणना कर सकते हैं r = sqrt(x^2+y^2)काफी आसानी से, आप अक्सर मामलों में से कुछ भेद की जरूरत है जब कोण की गणना phiक्योंकि arcsin, arccosऔर arctanऔर अन्य सभी त्रिकोणमितीय क्रियाओं एक सह डोमेन है कि प्रत्येक केवल फैला है आधा चक्र।

कई भाषाओं में आयताकार को ध्रुवीय निर्देशांक में परिवर्तित करने के लिए अंतर्निर्मित हैं, या कम से कम एक atan2फ़ंक्शन है, जो - दिए गए (x,y)- कोण की गणना करें phi

कार्य

आपका कार्य एक प्रोग्राम / फ़ंक्शन लिखना है जो दो लेता है (फ़्लोटिंग पॉइंट, दोनों शून्य नहीं) कार्टेशियन निर्देशांक (x,y), और संबंधित ध्रुवीय कोण को आउटपुट करता है phi, जहां phiडिग्री, रेडियन या ग्रेड में होना होता है ( ग्रेड के साथ मेरा मतलब ग्रेडियन है जो 1 / हैं पूर्ण चक्र के 400), जो भी आपके लिए अधिक सुविधाजनक है।

कोण को सकारात्मक अभिविन्यास में मापा जाता है, और हमारे पास शून्य कोण है (1,0)

विवरण

आप का निर्माण इन है कि कोण की गणना उपयोग नहीं कर सकते phiदो निर्देशांक, सहित दिया atan2, rect2polar, argOfComplexNumberऔर इसी तरह के कार्य करता है। हालाँकि आप सामान्य त्रिकोणमितीय फ़ंक्शंस और उनके उलट का उपयोग कर सकते हैं, कि केवल एक तर्क लें। कोई भी यूनिट प्रतीक वैकल्पिक हैं।

त्रिज्या rगैर-नकारात्मक phiहोना चाहिए , और सीमा में होना चाहिए [-360°, 360°](इससे कोई फर्क नहीं पड़ता कि आप आउटपुट करते हैं 270°या नहीं -90°)।

उदाहरण

Input       Output
(1,1)       45°
(0,3)       90°
(-1,1)      135°
(-5,0)      180°
(-2,-2)     225°
(0,-1.5)    270°
(4,-5)      308.66°

राड / डिग्री में आवश्यक परिशुद्धता?
लुइस मेंडो

मैं मशीन सटीक के बारे में सटीक कहता हूं, आप किस कार्यान्वयन पर निर्भर करते हैं (फ्लोट / डबल / जो भी)
त्रुटी

क्या हम इनपुट को एक जटिल संख्या के रूप में ले सकते हैं?
एडम

जवाबों:


9

MATL , 12 बाइट्स

yYy/X;0G0<?_

इसका परिणाम रेडियों में है।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों को सत्यापित करें

व्याख्या

MATL का कोई atanफ़ंक्शन नहीं है (यह है atan2, लेकिन इसका उपयोग इस चुनौती के लिए नहीं किया जा सकता है)। इसलिए मैंने सहारा लिया acos

y     % Take x, y implicitly. Duplicate x onto the top of the stack
Yy    % Compute hypothenuse from x, y
/     % Divide x by hypothenuse
X;    % Arccosine (inverse of cosine function)
0G    % Push y again
0<    % Is it negative?
?_    % If so, change sign. Implicitly end conditional branch. Implicitly display

क्या वास्तव में matl का कोई पूर्ण मूल्य नहीं है? यदि ऐसा होता है, तो आप शायद इसे बदलने के लिए इस्तेमाल कर सकते हैं 0<?_, कुछ बाइट्स को शेविंग कर सकते हैं
Zwei

2
@Zwei में यह ( |) है। लेकिन यहाँ मैं के हस्ताक्षर के आधार पर परिणाम के हस्ताक्षर बदल रहा हूँ दूसरी इनपुट , y। इसके अलावा, yहो सकता है 0, तो मैं से गुणा नहीं कर सकते हैंy/abs(y))
लुइस Mendo

5

जावास्क्रिप्ट (ईएस 6), 50 40 बाइट्स

(x,y)=>(Math.atan(y/x)||0)+Math.PI*(x<0)

इसका परिणाम रेडियों में है। संपादित करें: 10 बाइट्स सहेजे गए जब मैंने देखा कि यह परिणाम के लिए -90 ° और 270 ° के बीच की अनुमति है। इसके साथ पिछला संस्करण -Math.PI<=result<Math.PI:

(x,y)=>(Math.atan(y/x)||0)+Math.PI*(x<0)*(y>0||-1)

कौन सी इकाइयाँ? कृपया उन्हें अपने उत्तर में रखें।
सोलोमन उको

किस ||0लिए है?
l4m2

@ l4m2 x=y=0केस के लिए।
नील


3

जावास्क्रिप्ट ईएस 6, 54 बाइट्स

(x,y,m=Math)=>x<0&!y?m.PI:m.atan(y/(m.hypot(x,y)+x))*2

रेडियन का उपयोग करता है।


2

जेली , 11 बाइट्स (गैर-प्रतिस्पर्धात्मक)

<0×ØP+÷@ÆṬ¥

आउटपुट रेडियंस में है। दुर्भाग्य से, जेली के विभाजन परमाणुओं में एक साइन बग था, जिससे यह जवाब आवश्यक बग फिक्स के कारण गैर-प्रतिस्पर्धात्मक हो गया था।

इसे ऑनलाइन आज़माएं! या सभी परीक्षण मामलों (डिग्री में परिवर्तित) को सत्यापित करें

यह काम किस प्रकार करता है

<0×ØP+÷@ÆṬ¥  Main link. Left argument x. Right argument: y

<0           Compare x with 0.
  ×ØP        Multiply the resulting Boolean by Pi.
          ¥  Combine the two links to the left into a dyadic chain.
      ÷@     Divide y by x.
        ÆṬ   Apply arctan to the result.
     +       Add the results to both sides.

क्या बगफिक्सिंग एक उत्तर को गैर-प्रतिस्पर्धी बनाने के रूप में गिना जाता है? यह अजीब लगता है। यदि सही व्यवहार पहले से ही निर्दिष्ट था, तो बगफिक्स असंबंधित होना चाहिए। (आखिर, कौन जानता है कि आपने किसी अन्य व्यक्ति को किसी गैर-जिम्मेदार एज-केस को ठीक करके कितने अन्य उत्तर दिए हैं?)
मारियो कार्नेइरो

@MarioCarneiro PPCG पर, दुभाषिया भाषा को परिभाषित करता है । यह मुख्य रूप से है क्योंकि इरादों को जज करना मुश्किल है (और अधिकांश एसोलैंग में वास्तव में संक्षिप्त कल्पना नहीं है), जबकि आप एक कार्यान्वयन के साथ बहस नहीं कर सकते। ध्यान दें कि दुभाषिया को बदलने से पुराने उत्तरों की वैधता प्रभावित नहीं होती है। उन्हें केवल दुभाषिया के कुछ प्रकाशित संस्करण में काम करना होगा।
डेनिस

मेरा मतलब है कि आपने कुछ इनपुट पर पुराने उत्तरों के व्यवहार को बदल दिया होगा जो उस समय प्रयास नहीं किए गए थे। पीपीसीजी तथ्य परीक्षण के बाद खराब परीक्षण मामलों को कैसे संभालती है?
मारियो कार्नेइरो

यदि परीक्षण मामले अपर्याप्त साबित होते हैं, तो अधिक परीक्षण मामले जोड़े जाते हैं। सभी वैध इनपुट के लिए समाधान की उम्मीद की जाती है, न कि केवल प्रश्न में परीक्षण के मामले। पुन: बग ठीक। मेरे दुभाषिया ने केवल 0 द्वारा विभाजन के लिए गलत संकेत -1÷0दिया ( infइसके बजाय दिया -inf), इसलिए यह अधिकांश चुनौतियों को प्रभावित करने की संभावना नहीं है।
डेनिस

2

पायथन 3, 75 67 बाइट्स

8 बाइट्स डेनिस की बदौलत।

from math import*
lambda x,y:pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2

Ideone यह!


क्या आपको लिखना है andऔर or?
त्रुटी

मैं और क्या कर सकता हुँ?
लीक नून

1
@flawr पायथन केवल andऔर है or
डेनिस

2
pi*(x<0==y)or atan(y/(hypot(x,y)+x))*2कुछ बाइट्स बचाता है।
डेनिस

4
@flawr: &एक बिटवाइज़ ऑपरेटर है।
वाल्टाह

2

एपीएल (डायलॉग यूनिकोड) , 12 10 बाइट्स एसबीसीएस

-2 ngn के लिए धन्यवाद।

बेनामी tacit infix फ़ंक्शन। एलेफाल्फा के सूत्र का उपयोग करता हैxसही तर्क के yरूप में और बाएं तर्क के रूप में लेता है। परिणाम रेडियंस में है।

11○∘⍟0J1⊥,

इसे ऑनलाइन आज़माएं!

, संक्षिप्त yऔरx

0J1⊥ आधार I अंकों के रूप में मूल्यांकन करें (यानी y i x + x i i )

 उस का प्राकृतिक लघुगणक

 फिर

11○ उस का काल्पनिक हिस्सा



@ngn धन्यवाद।
13:12 पर Adám

11○∘⍟->12○
nnn

@ng आप उपयोग नहीं कर सकते हैं ...argOfComplexNumber
Adám

ओह ... मैं देख रहा हूँ, माफ करना
ngn

1

गणितज्ञ, 16 बाइट्स

मुझे यकीन नहीं है कि क्या Logएक अंतर्निहित माना जाता है कि दो निर्देशांकों को दिए गए कोण की गणना करता है।

N@Im@Log[#+I#2]&

उदाहरण:

In[1]:= N@Im@Log[#+I#2]&[1,1]

Out[1]= 0.785398

In[2]:= N@Im@Log[#+I#2]&[4,-5]

Out[2]= -0.896055

यह एक चतुर विचार है! क्या आप एक उदाहरण जोड़ सकते हैं कि इस फ़ंक्शन को कैसे कॉल किया जाए?
दोष

1

x86 मशीन लैंग्वेज (32 बिट लिनक्स), 25 13 बाइट्स (नॉनकमेटिंग)

0:       55                      push   %ebp
1:       89 e5                   mov    %esp,%ebp
3:       dd 45 08                fldl   0x8(%ebp)
6:       dd 45 10                fldl   0x10(%ebp)
9:       d9 f3                   fpatan  
b:       c9                      leave
c:       c3                      ret

करने के लिए इसे ऑनलाइन आज़माएं , निम्नलिखित सी कार्यक्रम संकलन (मत भूलना -m32x86_64 पर झंडा)

#include<stdio.h>
#include<math.h>
const char j[]="U\x89\xe5\335E\b\335E\20\xd9\xf3\xc9\xc3";
int main(){
  for(double f=-1;f<1;f+=.1){
    for(double g=-1;g<1;g+=.1){
      printf("%.2f %.2f %f %f\n",f,g,atan2(f,g),((double(*)(double,double))j)(f,g));
    }
  }
}

1

जे , 10 बाइट्स

बेनामी tacit infix फ़ंक्शन। एलेफाल्फा के सूत्र का उपयोग करता हैxबाएं तर्क के yरूप में और सही तर्क के रूप में लेता है। परिणाम रेडियंस में है।

11 o.^.@j.

इसे ऑनलाइन आज़माएं!

j. गणना x+ y× i

@ फिर

^. उस का प्राकृतिक लघुगणक

11 o. उस का काल्पनिक हिस्सा




0

पायथन 3, 65 बाइट्स

from math import*
f=lambda x,y:atan(y/x if x else y*inf)+pi*(x<0)

यह रेंज में रेडियन का उत्पादन करता है [-π/2, 3π/2), [-90, 270)डिग्री के बराबर है ।


0

Axiom, 58 बाइट्स

f(a,b)==(a=0 and b=0=>%i;sign(b)*acos(a*1./sqrt(a^2+b^2)))

परीक्षण (मैं केवल एसोस का उपयोग करता हूं) (यह रेडिएंट लौटाता है)

(40) -> [[a,b,f(a,b)*180/%pi] for a in [1,0,-1,-5,-2,0,4] for b in [1,3,1,0,-2,-1.5,-5] ]
   (40)
   [[1.0,1.0,45.0], [0.0,3.0,90.0], [- 1.0,1.0,135.0], [- 5.0,0.0,180.0],
    [- 2.0,- 2.0,- 135.0], [0.0,- 1.5,- 90.0],
    [4.0,- 5.0,- 51.3401917459 09909396]]
                                            Type: List List Complex Float

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