दो बिंदुओं के बीच का कोण ज्ञात कीजिए


13

दो बिंदुओं को देखते हुए Aऔर बिंदु के बारे में लाइन Bसे कोण खोजें जहां मूल ( ) है। इसके अतिरिक्त, कोण सकारात्मक या नकारात्मक हो सकता है जो अंकों की स्थिति के आधार पर हो सकता है (उदाहरण देखें)। इनपुट बिंदु और होगा , और किसी भी सुविधाजनक रूप में दिया जा सकता है। आउटपुट डिग्री में कोण होगा (लेकिन यह सकारात्मक है यदि मूल के बारे में काउंटर-क्लॉकवाइज को प्राप्त करने के लिए घुमाया जाता है और यदि इसे दक्षिणावर्त घुमाया जाता है तो नकारात्मक होता है)। यदि कोण 180 डिग्री है, तो आप एक नकारात्मक या सकारात्मक आउटपुट वापस कर सकते हैं। इसी तरह, कोण एक ही कोण का सकारात्मक या नकारात्मक संस्करण हो सकता है ( बराबर है )। उदाहरण:AOBOOO(0,0)ABAOBO90 deg-270 deg

  • इनपुट: A(5,5) B(5,-5)आउटपुट: -90( प्राप्त करने के लिए AOघुमाया गया -90डिग्री है BO)।

  • इनपुट: A(5,-5) B(5,5)आउटपुट: 90( प्राप्त करने के लिए AOघुमाया गया 90डिग्री है BO)।

यह , इसलिए बाइट्स जीत में सबसे छोटा कोड है!


11
कितनी सटीकता की आवश्यकता है?
रेटो कोराडी

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

5
यदि एक बिंदु है तो आउटपुट क्या होना चाहिए (0,0)?
lirtosiast

1
@ThomasKwa मुझे ओपी के बारे में पता नहीं है, लेकिन मैंने इसे केवल पूर्णांक / दशमलव संख्या इनपुट के रूप में माना है, और इनपुट में कभी भी (0,0) बिंदु नहीं होगा।
गेमक्रॉप्स

2
संकेत: बीच का कोण AOऔर BOआमतौर पर कोण कहा जाएगा AOB
15

जवाबों:


12

अजगर, 11 बाइट्स

.t-FPM.jMQ6

प्रदर्शन

इनपुट प्रारूप में दिया गया है:

[[Bx, By], [Ax, Ay]]

यदि यह वांछित है कि ए पहले आता है, तो इसे 1 बाइट के लिए बदला जा सकता है।

स्पष्टीकरण:

.t-FPM.jMQ6
               Implicit: Q = eval(input())
      .jMQ     Convert input pairs to complex numbers.
    PM         Take their phases (angles in the complex plane).
  -F           Take the difference.
.t        6    Convert to degrees

22

टीआई-बेसिक, 13 बाइट्स

TI-83 + / 84 + श्रृंखला कैलकुलेटर के लिए।

Degree
Input Y
min(ΔList(R►Pθ(Ans,∟Y

इस कार्यक्रम का उपयोग करने के लिए, {x1,x2}Ans चर के माध्यम से सूची दर्ज करें , और {y1,y2}प्रॉम्प्ट पर।


क्या TI-BASIC कमांड एक सिंगल बाइट है?
corsiKa 18

यहां सभी कमांड, सिवाय एकΔList( - एक बाइट हैं। इसमें शामिल हैं R►Pθ(
18

+1 केवल कैलकुलेटर प्रोग्रामिंग का उपयोग करने के लिए। मुझे अपने हाई स्कूल के दिनों में ट्रिग और कैलकुलस में ले जाता है।
вʀaᴎᴅᴏƞ вєнᴎєƞ

अच्छा संदर्भ! बेहद कूल।
corsiKa

10

CJam, 14 बाइट्स

q~::ma:-P/180*

यह एक पूर्ण प्रोग्राम है जो इनपुट को [[Ax Ay] [Bx By]]STDIN से पढ़ता है ।

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

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

q~             e# Read and evaluate all input.
  ::ma         e# Replace each point (x, y) with atan2(x, y).
               e# This returns its angle with the positive y axis, measured clockwise.
      :-       e# Compute the difference of the two resulting angles.
               e# This returns the angle between the points, measured counter-clockwise.
        P/180* e# Divide by Pi and multiply by 180 to convert to degrees.

5
यह मानते हुए कि इस कार्यक्रम का लगभग आधा हिस्सा केवल रेडियन को डिग्री में परिवर्तित कर रहा है ...
डारेल हॉफमैन

@DarrelHoffman मुझे यह और भी अधिक मनोरंजक लगता है कि पायथ में रूपांतरण 6 के बजाय 3 बाइट्स है, इसलिए यदि रेडियंस में रिपोर्टिंग के लिए अनुमति दी गई चुनौती को बाँध दिया जाएगा
FryAmTheEggman

5

मिंकोलंग 0.9 , 112 बाइट्स

मैं वास्तव में निर्मित कार्यों को अब इन्स के रूप में लागू करना चाहता हूं ... लेकिन यह मजेदार था! (कैविएट: यह सकारात्मक कोण अंतर को दर्शाता है, हस्ताक्षरित कोण अंतर को नहीं। मेरी सीमाओं को देखते हुए, मुझे लगता है कि यह उचित है।)

4[n]0c2c*1c3c*+r4[2;1R]r+1R+0g*12$:;$:8[0ci2*3+d1R;0g$:1i1+[i2*1+d1+$:*]*]$+'3.141592654'25*9;$:$:12$:r-66*5**N.

इसे यहाँ आज़माएँ।

व्याख्या

अगर कोई चाहता है तो मैं इसका पूरा विवरण दूंगा, लेकिन इसका सार यह है:

4[n]                                    Take in 4 integers from input
0c2c*1c3c*+                             dot product
r4[2;1R]r+1R+0g*12$:;                   magnitudes of vectors
$:                                      dot product divided by magnitudes (z)
8[0ci2*3+d1R;0g$:1i1+             *]    Taylor series for arccos
                     [i2*1+d1+$:*]      In particular, the coefficient (1/2 * 3/4 * ...)
$+                                      Add them all up!
'3.141592654'25*9;$:$:                  Divide by pi for converting to degrees
12$:r-                                  Subtract from 1/2 - I now have arccos(z)
66*5**                                  Convert to degrees
N.                                      Output as number and stop.

क्या मिंकोलंग टिप्पणियों का समर्थन करता है? मैं इसे रीडमी पर नहीं ढूंढ सका।
कॉनर ओ'ब्रायन

1
@ C @O'Bʀɪᴇɴ: यह अन्य 2D भाषाओं की तरह ही है - टिप्पणियाँ प्रोग्राम काउंटर तक नहीं पहुँच पाती हैं।
एलेंडिया स्ट्राटन

ओह तब ठीक है। यह समझ में आता है, मैं जो सोच रहा था, वह नहीं जानता।
कॉनर ओ'ब्रायन

@ C @O'Bʀɪᴇɴ: आपके किसी एक उत्तर में टिप्पणियों का स्पष्ट उपयोग मुझे ऐसी ही कार्यक्षमता को लागू करने पर विचार करता है। यह एक साफ विचार है और मेरे लिए इसे लागू करना बहुत कठिन नहीं होगा।
एलेंडिया स्ट्राटन

धन्यवाद! :Dक्या यह हैलो वर्ल्ड चुनौती थी जो आपने टिप्पणियों में देखी (FYI करें) मैंने जो सिम्पलेक्स रन के लिए अलग-अलग "मोड्स" में बनाया है: स्ट्रिंग मोड और कमेंट मोड। यह पार्स करने के लिए वास्तव में आसान बनाता है और आपको सिग्नल के पात्रों को अनदेखा करने की अनुमति देता है। दूसरे में मोड।)
कॉनर ओ'ब्रायन

4

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

{-1,1.}.ArcTan@@@#/°&

उदाहरण:

In[1]:= {-1,1.}.ArcTan@@@#/°&[{{5,5},{5,-5}}]

Out[1]= -90.

In[2]:= {-1,1.}.ArcTan@@@#/°&[{{5,-5},{5,5}}]

Out[2]= 90.

क्या यह इनपुट के लिए काम करेगा जैसे{{0,1},{1,0}}
lirtosiast

@ThomasKwa बेशक।
alephalpha

4

जावास्क्रिप्ट, 66 बाइट्स

let f=(a,b)=>(Math.atan2(b.y,b.x)-Math.atan2(a.y,a.x))*180/Math.PI;

डेमो


मुझसे पहले 23 सेकंड = पी अच्छा गोल्फ हालांकि! Btw, आप इसे छोड़ सकते हैं let f=, और इसे अभी भी एक अनाम फ़ंक्शन के रूप में मान्य माना जाता है।
Mwr247

3

जूलिया, 18 25 बाइट्स

f(A,B)=angle(B/A)/pi*180

यह मानता है कि "कोई भी सुविधाजनक रूप" पहले से ही जटिल संख्याओं के लिए अनुमति देता है Aऔर Bदिया जाता है। फिर, जटिल संख्या अंकगणित सभी भारी उठाने करता है।

संपादित करें: कार्य करने के लिए परिवर्तित स्निपेट। 18 बाइट संस्करण केवल जूलिया आरईपीएल में काम करता है।


3

पायथन 2.7, 73 बाइट्स

from math import*
f=lambda A,B:degrees(atan2(B[1],B[0])-atan2(A[1],A[0]))

परीक्षा:

f((5,5),(5,-5)) #-90.0
f((5,-5),(5,5)) #90.0

PPCG में आपका स्वागत है! यह कोड-गोल्फ है, इसलिए आपको अपने रिक्त स्थान को जितना हो सके हटाने का प्रयास करना चाहिए और अपने कोड को छोटा करना चाहिए।
mbomb007

1
आप बेतहाशा जोड़ने में कुछ लोगों द्वारा अपने कोड में कम कर सकते हैं *s हर जगह
FryAmTheEggman

3

ऑक्टेव, 43 बाइट्स

f=@(a,b)(cart2pol(b)-cart2pol(a))(1)*180/pi

इनपुट आउटपुट:

octave:40> f([5,5],[5,-5])
ans = -90

octave:41> f([1,0],[0,1])
ans = 90

3

सीजेएम, 15 बाइट्स

l~ma@@ma-P/180*

सोचा था कि मैं सीजेएम खेल में भी मिलूंगा। इसे ऑनलाइन आज़माएं । इनपुट के रूप में है bx by ax ay। दुर्भाग्य से, डेनिस के जवाब की नकल के बिना इस चुनौती को करने का यह सबसे छोटा तरीका है।


3

टीस्क्रिप्ट, 28 बाइट्स

मुझे वास्तव में ट्रिगर कार्यों को लागू करना चाहिए ...

$.atan2(_[3]-y,z-x)*180/$.PI

यह कोशिश करो ऑनलाइन इनपुट हैa.x a.y b.x b.y

व्याख्या

$.atan2(       // Arc Tangent of...
    _[3] - y,  // 4th input - 2nd input
       z - x,  // 3rd input - 1st input
) * 180 / $.PI // Converts rad -> deg

2

रूबी, 64 , 58 बाइट्स

a=->(b){b.map{|c|Math.atan2(*c)}.reduce(:-)*180/Math::PI}

प्रयोग

a.call [[5, 5], [5, -5]] # => -90.0
a.call [[5, -5], [5, 5]] # => 90.0

2

जावास्क्रिप्ट, 49 बाइट्स

(a,b)=>((c=Math.atan2)(...b)-c(...a))/Math.PI*180

इनपुट के रूप में लिया जाता है: [aY, aX], [bY, bX](उलट x / y पर ध्यान दें)


1

सिंप्लेक्स v.0.7 , 13 बाइट्स

मुझे खुशी है कि मैंने जोड़ा mathrelations: डी दुर्भाग्य से, मैं पॉइंटवाइज़ इनपुट नहीं ले सकता। इसलिए, मैं प्रत्येक बिंदु को एक अलग संख्या (कुल्हाड़ी, आय, बीएक्स, बाय) के रूप में इनपुट करता हूं। (मैंने इसे एक संसाधन के रूप में इस्तेमाल किया है ।)

(iRi~^fR)2LSo
(       )2    ~~ repeat inner twice
 iRi          ~~ take two chars of input (x,y)
    ~         ~~ switch top 2 on stack
     ^f       ~~ apply atan2 on (y,x)
       R      ~~ go right
          L   ~~ go left
           S  ~~ subtract result
            o ~~ output as number

अगर मैं इनपुट ले सकता हूं तो एक आय को बचा सकता हूं (आय, एक्स, बाय, बीएक्स):

(iRi^fR)2LSo

1

सी, 88 बाइट्स

#include<math.h>
typedef double d;d g(d x,d y,d a,d b){return atan2(b-y,a-x)*180/M_PI;}

जीसीसी के अंतर्निहित गणित स्थिरांक के एक भाग के रूप M_PIमें परिभाषित होने का लाभ उठाने के लिए जीसीसी के साथ संकलन की आवश्यकता हैइसे ऑनलाइन आज़माएं - चूंकि ideone GCC (जाहिरा तौर पर) का उपयोग नहीं करता है, सटीक होने के लिए पर्याप्त अंकों के लिए अतिरिक्त कुछ बाइट्स की आवश्यकता होती है।math.h


या 45/atan(1)इसके बजाय 180/3.14159....(ऑनलाइन डेमो में)।
कंपूशिप

@CompuChip मैं ऑनलाइन डेमो को अधिकतम रूप से गोल्फ बनाने की कोशिश नहीं कर रहा था
मेगो

आप कोष्ठक राउंड एटैन 2 (बाय, कुल्हाड़ी) को हटा सकते हैं, हालांकि आपको तब वापसी के बाद एक स्थान की आवश्यकता होती है इसलिए यह केवल 1 बाइट बचाता है। यदि आप K & R स्टाइल फ़ंक्शंस का उपयोग कर सकते हैं तो डबल g (x, y, a, b) डबल x, y, a, b; छह बाइट्स भी बचाता है।
अल्काइमर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.