मैं एक वृत्त की परिधि पर एक बिंदु की गणना कैसे करूं?


223

निम्नलिखित समारोह को विभिन्न भाषाओं में कैसे लागू किया जा सकता है?

(x,y)एक वृत्त की परिधि पर बिंदु की गणना करें , दिए गए इनपुट मान:

  • त्रिज्या
  • कोण
  • उत्पत्ति (वैकल्पिक पैरामीटर, यदि भाषा द्वारा समर्थित है)

जवाबों:


593

एक चक्र के लिए पैरामीट्रिक समीकरण है

x = cx + r * cos(a)
y = cy + r * sin(a)

कहाँ आर त्रिज्या, है cx, CY मूल, और एक कोण।

मूल ट्रिगर फ़ंक्शन के साथ किसी भी भाषा में अनुकूलित करना बहुत आसान है। ध्यान दें कि अधिकांश भाषाएं ट्रिग फ़ंक्शन में कोण के लिए रेडियन का उपयोग करेंगी , इसलिए 0..360 डिग्री के माध्यम से साइकिल चलाने के बजाय, आप 0..2PI रेडियन के माध्यम से साइकिल चला रहे हैं।


107
ध्यान दें कि aरेडियंस में होना चाहिए - यह समझने के लिए एक शुरुआत के रूप में मेरे लिए वास्तव में कठिन था।
इयॉन

13
मैं अब एक घंटे के लिए इस समीकरण को प्राप्त करने की कोशिश कर रहा हूं। धन्यवाद। कौन जानता है कि हाई स्कूल में सीखी गई ट्रिगर पहचानें इतनी मददगार होंगी।
इस्योमा ननोडुम

1
@ ऑपरेटर ऑपरेटर की पूर्वता के कारण अतिरिक्त कोष्ठक की कोई आवश्यकता नहीं है। जब आपके पास +और *उन दो समीकरणों में और बिना किसी कोष्ठक के आप हमेशा *पहले और फिर के लिए जाते हैं +
rbaleksandar

13
@IsiomaNnodum वह मददगार नहीं हो सकता था यदि हम सब यहाँ वापस आ रहे हैं बस यह याद रखें कि समीकरण क्या था।
b1nary.atr0phy

48

यहाँ C # में मेरा कार्यान्वयन है:

    public static PointF PointOnCircle(float radius, float angleInDegrees, PointF origin)
    {
        // Convert from degrees to radians via multiplication by PI/180        
        float x = (float)(radius * Math.Cos(angleInDegrees * Math.PI / 180F)) + origin.X;
        float y = (float)(radius * Math.Sin(angleInDegrees * Math.PI / 180F)) + origin.Y;

        return new PointF(x, y);
    }

5
रूपांतरण कारक की पूर्व-गणना करें ताकि आपको कम-कोडित संख्याओं का उपयोग करके रूपांतरण को गलत लिखने की संभावना कम हो।
स्कॉटी टी

15

जब आपके पास जटिल संख्याएँ हों तो उन्हें किसकी आवश्यकता होगी :

#include <complex.h>
#include <math.h>

#define PI      3.14159265358979323846

typedef complex double Point;

Point point_on_circle ( double radius, double angle_in_degrees, Point centre )
{
    return centre + radius * cexp ( PI * I * ( angle_in_degrees  / 180.0 ) );
}

यह कैसे काम करता है? यह गति वार की तुलना कैसे करता है? यह आमतौर पर क्यों इस्तेमाल नहीं किया जाता है?
मार्क ए। रॉपर

@ MarkA.Ropper जटिल नंबर कैसे काम करते हैं? - यदि आप पहले से ही एक जटिल संख्या को जानते हैं, तो गणित के ट्यूटोरियल देखें या en.wikipedia.org/wiki/Euler%27s_identity से जाएं । यह शायद लुक-अप तालिका के रूप में पाप को लागू करने की तुलना में गति में कुशल नहीं है, लेकिन कभी-कभी आप जटिल संख्याओं का उपयोग करके उनमें से अन्य गुणों का दोहन करने के लिए बिंदुओं का प्रतिनिधित्व करते हैं। 3D घुमावों के लिए quaternions का उपयोग करने के समान, यह वास्तव में गति नहीं है, लेकिन क्षमताओं जो वे आपको देते हैं।
पीट किर्कम

2

जावास्क्रिप्ट (ES6) में लागू :

/**
    * Calculate x and y in circle's circumference
    * @param {Object} input - The input parameters
    * @param {number} input.radius - The circle's radius
    * @param {number} input.angle - The angle in degrees
    * @param {number} input.cx - The circle's origin x
    * @param {number} input.cy - The circle's origin y
    * @returns {Array[number,number]} The calculated x and y
*/
function pointsOnCircle({ radius, angle, cx, cy }){

    angle = angle * ( Math.PI / 180 ); // Convert from Degrees to Radians
    const x = cx + radius * Math.cos(angle);
    const y = cy + radius * Math.sin(angle);
    return [ x, y ];

}

उपयोग:

const [ x, y ] = pointsOnCircle({ radius: 100, angle: 180, cx: 150, cy: 150 });
console.log( x, y );

Codepen

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