सर्कल चौराहा क्षेत्र


14

विवरण :

उनके साथ दो सर्किलों को देखते हुए xऔर yउनके स्थान पर radii, दो सर्कल के चौराहे के क्षेत्र का उत्पादन।


इनपुट:

आपको निम्नलिखित इनपुट दिए जाएंगे:

array 1 = x and y positions of circle a
array 2 = x and y positions of circle b
radius  = radii of the two congruent circles

इनपुट विधि :

([12 , 20] , [20 , 18] , 12)     ---> two array and number
([12 , 20 , 20 , 18] , 12)       ---> array and a number
(12 , 20 , 20 , 18 , 12)         ---> all five numbers
('12 20' , '20 18' , 12)         ---> 2 strings and a number
('12 20 20 18' , 12)             ---> string and a number
('12 20 20 18 12')               ---> one string

आउटपुट:

  • एक गैर-नकारात्मक पूर्णांक (कोई दशमलव) दो हलकों के चौराहे के क्षेत्र के बराबर।

  • उपर्युक्त पूर्णांक के बराबर एक स्ट्रिंग।

ध्यान दें :

  • उत्पादन> = 0 होना चाहिए, क्योंकि क्षेत्र नकारात्मक नहीं हो सकता है।
  • दशमलव के मामले में निकटतम पूर्णांक तक नीचे

उदाहरण :

([0, 0], [7, 0], 5)                   ---> 14

([0, 0], [0, 10], 10)                 ---> 122

([5, 6], [5, 6], 3)                   ---> 28

([-5, 0], [5, 0], 3)                  ---> 0

([10, 20], [-5, -15], 20)             ---> 15

([-7, 13], [-25, -5], 17)             ---> 132

([-12, 20], [43, -49], 23)            ---> 0

जीत मापदंड:

यह प्रत्येक भाषा की जीत के लिए बाइट्स में इतना छोटा कोड है।


सुझाव:

  • एक TIO लिंक प्रदान करें ताकि इसका परीक्षण किया जा सके।
  • एक स्पष्टीकरण प्रदान करें ताकि अन्य लोग आपके कोड को समझ सकें

ये केवल सुझाव हैं और अनिवार्य नहीं हैं।



2
@FrownyFrog: क्षमा करें? मुझे इस बात की जानकारी नहीं है कि आप किस बारे में बात कर रहे हैं? nvm इंटरनेट पर जांच करें और मुझे रिपोर्ट करने के लिए खेद है कि समस्या का हिस्सा है। वह टैग देखें जो गणित और ज्यामिति कहता है। अपने गणित पर ब्रश करना एक अच्छा बहाना है। तुम क्या सोचते हो। लेकिन अगर आप असहमत हैं तो मुझे लगता है कि मैं सवाल को अपडेट करूंगा और फॉर्मूला जोड़ूंगा।
मुहम्मद सलमान

@MuhammadSalman बदलें answer must be positiveकरने के लिए answer must be >= 0- हलकों दूसरे को काट नहीं करते हैं तो सही जवाब 0 है, जो पिछले मैं जाँच की सकारात्मक नहीं है (4 उदाहरण, 7, 10 के रूप में)।
मनश्शेख्ज-चलते २ कोडिएडक्ट २०'१k

@manassehkatz: ठीक है, निश्चित है। संपन्न
मुहम्मद सलमान

जवाबों:


3

जेली ,  27 25 24  22 बाइट्स

×,²I½
÷ÆAײ}_çHḞ
ạ/çḤ}

एक पूरा कार्यक्रम दो केंद्रों की एक सूची को जटिल निर्देशांक और त्रिज्या के रूप में स्वीकार करता है जो परिणाम को प्रिंट करता है (एक डियाडिक लिंक के रूप में यह लंबाई 1 की सूची देता है)।

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

दो निर्देशांक लेने के लिए जैसे जोड़े Uḅıमुख्य लिंक में जोड़ते हैं , इस तरह

कैसे?

×,²I½ - Link 1, get [√(s²d² - s⁴)]: separation of centres, s; diameter, d
 ,    - pair = [s, d]
×     - multiply (vectorises) = [s², sd]
  ²   - square (vectorises) = [s⁴, s²d²]
   I  - incremental differences = [s²d² - s⁴]
    ½ - square root (vectorises) = [√(s²d² - s⁴)]

÷ÆAײ}_çHḞ - Link 2, get intersection area: separation of centres, s; diameter, d
÷          - divide = s/d
 ÆA        - arccos = acos(s/d)
    ²}     - square right = d²
   ×       - multiply = acos(s/d)d²
       ç   - call last Link (1) as a dyad (f(s,d)) = [√(s²d² - s⁴)]
      _    - subtract (vectorises) = [acos(s/d)d² - √(s²d² - s⁴)]
        H  - halve (vectorises) = [(acos(s/d)d² - √(s²d² - s⁴))/2]
         Ḟ - floor = [⌊(acos(s/d)d² - √(s²d² - s⁴))/2⌋]
           -  ...Note: Jelly's Ḟ takes the real part of a complex input so when
           -           the circles are non-overlapping the result is 0 as required

ạ/çḤ} - Main link: centres, a pair of complex numbers, c; radius, r
 /    - reduce c by:
ạ     -   absolute difference = separation of centres, s
      -   ...Note: Jelly's ạ finds the Euclidean distance when inputs are complex
      -            i.e. the norm of the difference
   Ḥ} - double right = 2r = diameter, d
  ç   - call last Link (2) as a dyad (f(s,d))
      - implicit print

केवल आंकड़े। और वह क्या है [-7 + 13j, -25 + -5j]? मेरे पास वह उदाहरण नहीं है। आपको यह समझाना पड़ सकता है कि आपने क्या किया?
मुहम्मद सलमान

मैंने इसे पहले से ही उत्तर में समझाया ... वे जटिल विमान पर समन्वय कर रहे हैं ... मैं [[x1,y1],[x2,y2]]इसके बजाय कर सकता हूं लेकिन इसकी लागत 3 बाइट्स है। (ध्यान दें कि -7+13j यह एक संख्या है :)) - [-7+13j,-25+-5j]रिटर्न करने वाले उदाहरण से मेल खाती है 132,[-7, 13], [-25, -5], 17
जोनाथन एलन

मुझे जैली का पता नहीं है इसलिए मैं उस पर हार गया हूं। साथ ही मैंने स्पष्टीकरण से पहले संदेश भेजा। लेकिन हाँ, यकीन है कि यह काम करता है (मुझे लगता है?)
मुहम्मद सलमान

यह जेली प्रति-से कोई लेना देना नहीं है, यह सिर्फ गणित है। 2-अंतरिक्ष में एक बिंदु एक जटिल संख्या के समान है ।
जोनाथन एलन

मेरे कहने का मतलब नहीं। सामान्य भाषाएं मैं पढ़ सकता हूं और बता सकता हूं कि क्या चल रहा है। जेली और ऐसी अन्य भाषाओं को पढ़ने के लिए एक दर्द है।
मुहम्मद सलमान

3

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

वैकल्पिक सूत्र @ceilingcat द्वारा सुझाया गया

5 अलग-अलग मापदंडों (x0, y0, X1, y1, r) के रूप में इनपुट लेता है ।

with(Math)f=(x,y,X,Y,r)=>-(sin(d=2*acos(hypot(x-X,y-Y)/r/2))-d)*r*r*2>>1

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


जावास्क्रिप्ट (ईएस 7), 81 80 77 बाइट्स

3 बाइट्स @Neil की बदौलत सहेजे गए

5 अलग-अलग मापदंडों (x0, y0, X1, y1, r) के रूप में इनपुट लेता है ।

(x,y,X,Y,r,d=Math.hypot(x-X,y-Y))=>(r*=2)*r*Math.acos(d/r)-d*(r*r-d*d)**.5>>1

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

कैसे?

यह गैर-अनुरूप हलकों के लिए मैथवर्ल्ड के एक सामान्य सूत्र पर आधारित है :

A = r².arccos((d² + r² - R²) / 2dr) +
    R².arccos((d² + R² - r²) / 2dR) -
    sqrt((-d + r + R)(d + r - R)(d -r + R)(d + r + R)) / 2

जहां दो केन्द्रों और बीच की दूरी है आर और आर जीवाएं हैं।

साथ आर = आर , यह करने के लिए सरल है:

A = 2r².arccos(d / 2r) + d.sqrt((2r - d) * (2r + d)) / 2

और r '= 2r के साथ :

A = (r'².arccos(d / r') + d.sqrt(r'² - d²)) / 2

नोट : यदि d 2r से अधिक है , Math.acos()तो वापस आ जाएगा NaN, जो दाएं-शिफ्ट लागू होने पर 0 के लिए बाध्य है। यह अपेक्षित परिणाम है, क्योंकि d> 2r का अर्थ है कि कोई चौराहा नहीं है।


d*(r*r-d*d)**.53 बाइट्स बचाता है।
नील

@ceilingcat धन्यवाद! 2 बाइट्स सेव with(Math)की परिभाषा का उपयोग करना और बढ़ना d
अरनौलड

3

गणितज्ञ 66 57 51 बाइट्स

Floor@Area@RegionIntersection[#~Disk~#3,#2~Disk~#3]&

A Disk[{x,y},r]उस क्षेत्र को संदर्भित करता है जो वृत्त की {x,y}त्रिज्या से परिचालित है r

RegionIntersection[a,b]क्षेत्रों के चौराहे रिटर्न a, bAreaक्षेत्र लेता है। IntegerPartनिकटतम पूर्णांक तक गोल।


रिकॉर्ड के लिए, मुझे एलेफाल्फा की सबमिशन दिखाई नहीं दी क्योंकि मैं अपना काम कर रहा था। उनकी छोटी (इसलिए अधिक सफल) प्रविष्टि है, लेकिन मैंने वैसे भी मेरा साथ छोड़ दिया।
डेविडक्र्स

आप के IntegerPartसाथ बदल सकता है Floor
मैट्रिक्स

@ मथे, धन्यवाद। यदि मैं समर्पित मंजिल कोष्ठक का उपयोग करता हूं, तो क्या आप जानते हैं कि मैं बाइट्स कैसे गिनता हूं?
डेविड ऑग

@ डेविड प्रत्येक 3 बाइट्स है, इसलिए बाइट काउंट के लिए इस मामले में प्रतिस्थापन तटस्थ है। वे उपयोगी हैं यदि अभिव्यक्ति को अन्यथा कोष्ठक की आवश्यकता होगी, हालांकि (-1 बाइट की तुलना में Floor[ ])।
attinat






0

एक्सेल, 119 बाइट्स

=INT(IFERROR(2*E1^2*ACOS(((C1-A1)^2+(D1-B1)^2)^.5/2/E1)-((4*E1^2-((C1-A1)^2+(D1-B1)^2))*((C1-A1)^2+(D1-B1)^2))^.5/2,0))

5 अलग-अलग चर के रूप में लिया गया इनपुट:

x-coordinate    y-coordinate    x-coordinate    y-coordinate    radius
     A1              B1             C1                D1          E1

0

पायथन 2 , 109 बाइट्स

from math import*
a,b,x,y,r=input()
d,R=hypot(x-a,y-b),2*r
print int(d<R and R*r*acos(d/R)-d*sqrt(R*R-d*d)/2)

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

बहुत सीधा। हलकों के बीच की दूरी प्राप्त करें, और R=2rसमीकरण में एक स्थानापन्न के रूप में उपयोग करें । d<R andशॉर्ट-सर्किट अगर सर्किल ओवरलैप नहीं करते हैं।


0

पायथ , 63 बाइट्स

J@+^-hhQh@Q1 2^-ehQe@Q1 2 2K*2eQs&<JK-**KeQ.tcJK4c*J@-*KK*JJ2 2

परीक्षण सूट

दो युगल और एक संख्या से मिलकर एक ट्रिपल के रूप में इनपुट लेता है।


0

टी-एसक्यूएल, 122 बाइट्स

SELECT FLOOR(Geometry::Parse('POINT'+a).STBuffer(r).STIntersection(
             Geometry::Parse('POINT'+b).STBuffer(r)).STArea())FROM t

(केवल पठनीयता के लिए लाइन ब्रेक)।

स्थानिक ज्यामिति के MS SQL के समर्थन का उपयोग करता है

हमारे आईओ मानकों के अनुसार , एसक्यूएल एक पूर्व मौजूदा तालिका से इनपुट ले जा सकते हैं टी के साथ intक्षेत्र आर और varcharखेतों एक और प्रारूप में निर्देशांक युक्त (x y)

मेरा कथन निर्देशांक का उपयोग करता POINTहै क्योंकि ज्यामिति ऑब्जेक्ट्स का उपयोग त्रिज्या द्वारा कार्य का विस्तार करके किया जाता है STBuffer(), फिर उसके बाद लिया STIntersection()जाता है STArea()

अगर मुझे इसके बजाय तालिका में वास्तविक ज्यामिति वस्तुओं को इनपुट करने की अनुमति है , तो मेरा कोड लगभग तुच्छ हो जाता है (48 बाइट्स):

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