1. जावा मध्ये त्रिकोणमितीय कार्ये

आम्ही आधी गोलाकार संख्यांचा अभ्यास केला तेव्हा आम्हाला Mathवर्ग आणि त्यातील काही पद्धतींची ओळख झाली. आता आपण या वर्गाकडे अधिक तपशीलवार पाहू.

नावाप्रमाणेच, Mathवर्गामध्ये प्रोग्रामरद्वारे वारंवार वापरल्या जाणार्‍या गणितीय ऑपरेशन्ससाठी पद्धती आहेत. येथे सर्वात मनोरंजक आहेत:

पद्धत वर्णन
double sin(double d)
dरेडियनमध्ये, कोनाचे साइन मिळवते
double cos(double d)
कोनाचा कोसाइन dरेडियनमध्ये परत करतो
double tan(double d)
dरेडियनमध्ये, कोनाची स्पर्शिका मिळवते
double asin(double d)
आर्कसिन परत करतो
double acos(double d)
अर्कोसाइन परत करते
double atan(double d)
आर्कटॅंजेंट परत करतो
double sinh(double d)
हायपरबोलिक साइन मिळवते
double cosh(double d)
हायपरबोलिक कोसाइन मिळवते
double tanh(double d)
अतिपरवलय स्पर्शिका मिळवते

, आणि पद्धती रेडियनमध्ये व्यक्त केलेला कोन घेतात. कोन अंशातून रेडियनमध्ये रूपांतरित करण्यासाठी आणि त्याउलट, वर्ग दोन विशेष पद्धती प्रदान करतो:Math.sin()Math.cos()Math.tan()Math

पद्धत वर्णन
double toRadians(double angdeg)
अंशापासून रेडियनमध्ये कोन रूपांतरित करते
double toDegrees(double angrad)
एका कोनाला रेडियनमधून अंशांमध्ये रूपांतरित करते

तसे, पद्धतींव्यतिरिक्त, क्लासमध्ये दोन स्थिर व्हेरिएबल्सMath देखील असतात (वर्गाची स्थिर फील्ड):

स्थिर वर्णन
double Math.PI
"Pi" स्थिरांक समान आहे3.141592653589793
double Math.E
"E" स्थिरांक समान आहे2.718281828459045

जर तुम्ही तुमचे स्वतःचे गेम लिहायचे, ग्राफिक्ससह काम करायचे किंवा नकाशावर पथाची लांबी मोजायचे ठरवले तर ही सर्व कार्ये तुमच्यासाठी खूप उपयुक्त ठरू शकतात.

उदाहरणार्थ, आपण गणना करू इच्छित असल्यास sin(45°), आपण ते कसे करता ते येथे आहे:

Math.sin( Math.toRadians(45) )

येथे एक उदाहरण आहे:

public class Main
{
   public static int N = 10;

   public static void drawValue(double y)
   {
     int value = (int) (y * N) + N;
     for (int i = 0; i < 2 * N; i++)
     {
       char c = i == N ? '|': '.';
       if (i == value)
         c = '*';
       System.out.print(c);
     }
     System.out.println();
   }

   public static void main(String[] args)
   {
     for (int i = 0; i < 10 * N; i++)
     {
       double x = i * 1.0 / N;
       double y = Math.sin(x);
       drawValue(y);
     }
   }
}


2. Java मध्ये बीजगणितीय कार्ये

बहुतेक प्रकरणांमध्ये, हायस्कूल गणित प्रोग्रामरसाठी पुरेसे आहे: कोडमध्ये अगदी क्वचितच सायन्स आणि कोसाइन देखील आढळतात. गेम, नकाशे किंवा गेम इंजिनसह काम करताना बहुतेकदा ते आवश्यक असतात. 90% प्रोग्रामरना याचा सामना कधीच होत नाही.

परंतु भूमिती व्यतिरिक्त, प्रोग्रामरना कधीकधी बीजगणितीय कार्ये वापरावी लागतात. आणि, अर्थातच, Mathवर्गात सर्वात सामान्य आहेत:

पद्धत वर्णन
double sqrt(double a)
चे वर्गमूळa
double cbrt(double a)
चे घनमूळa
double pow(double a, double b)
घातांक:ab
double exp(double a)
घातांक (यूलरची संख्या घात वाढवली):ea
double log(double a)
चे नैसर्गिक लॉगरिथम a:ln(a)
double log10(double a)
बेस-10 चे लॉगरिदम a:log10(a)
double log1p(double x)
चे नैसर्गिक लॉगरिथम x + 1:ln(x + 1)
double expm1(double x)
ex-1

तुम्हाला संख्येचे वर्ग किंवा घनमूळ हवे असल्यास, sqrt(a)आणि cbrt(a)पद्धती तुमच्या सेवेत आहेत.

वर्गमूळ खालीलप्रमाणे काढता येते.

Math.sqrt(2)

जर तुम्हाला उच्च शक्तीचे मूळ मिळवायचे असेल, तर घातांक पद्धत वापरा: चौथ्या मूळची aशक्ती इ.¼

Math.pow(2, 0.25)

log(a)लॉगरिदम आणि घातांकांसाठी, (नैसर्गिक लॉगरिदम) आणि exp(x)(घातांक) पद्धती आहेत . बेस-10 लॉगरिदम काढण्यासाठी, आपल्याकडे आहे log10(a).

जर तुम्हाला एखाद्या संख्येचा लॉगॅरिथम bबेस बनवायचा असेल aतर हे साधे सूत्र वापरा:loga(b) = ln(b) / ln(a)

उपयुक्त पद्धती

जर तुम्ही मोजणी करत असाल ज्यात ची अगदी लहान मूल्ये असतील x, तर शेवटची दोन फंक्शन्स — log1p()आणि expm1()— तुमच्यासाठी उपयोगी असू शकतात.

खूप लहान आणि खूप मोठी व्हेरिएबल्स जोडताना double, तुम्हाला असे आढळेल की खूप लहान व्हॅल्यूज क्षुल्लक म्हणून दुर्लक्षित (टाकून) केले जातात. log()खरं तर, आपण आणि पद्धती वापरल्यास हे होईल exp(). याचे निराकरण करण्यासाठी, प्रोग्रामर फंक्शन्स घेऊन आले जे फक्त "लहान महत्त्वपूर्ण भाग" परत करतात.

उदाहरण:

समजा तुम्हाला नैसर्गिक लॉगरिथमची गणना करायची आहे 1 + x, कुठे xआहे . तुम्ही हा नंबर फक्त पद्धतीत पास करू शकत नाही , कारण तुम्ही आणि जोडल्यास तुम्हाला मिळेल . एवढी लहान संख्या आहे की संख्या जोडल्यावर ती पूर्णपणे टाकून दिली जाईल.10-20log()110-20110-20

कारण गणितामध्ये बहुतेक वेळा log()जवळच्या संख्यांची गणना करणे 1समाविष्ट असते, प्रोग्रामर या समस्येचे निराकरण करण्याचा एक मार्ग शोधून काढतात: संख्या स्वतःच पद्धतीमध्ये पास करण्याऐवजी, फक्त त्यातील फरक पास करा 1.



3. किमान आणि कमाल

आणखी दोन उपयुक्त कार्ये आहेत min(a, b)आणि max(a, b). जसे आपण आधीच अंदाज लावला आहे, प्रथम किमान दोन संख्या परत करतो:

Math.min(a, b)

आणि दुसरा जास्तीत जास्त दोन संख्या देतो:

Math.max(a, b)

जेव्हा तुम्ही नेहमी लिहू शकता ifकिंवा टर्नरी ऑपरेटर वापरू शकता तेव्हा आम्हाला या फंक्शन्सची आवश्यकता का आहे (a < b ? a: b)?

हे सर्व कोडच्या वाचनीयतेबद्दल आहे. काहीवेळा तुमचा कोड स्टेटमेंटने ओव्हरलोड होतो ifआणि तुम्हाला अधिक कॉम्पॅक्ट नोटेशन वापरायचे असते. चला तुलना करूया:

कोड वर्णन
int x = 0;
if (x-5+y*20 < x*x+y*y)
   x = x-5+y*20;
else
   x = x*x+y*y;
विधान वापरणे if-else(ते लिहिण्याचा सर्वात लांब मार्ग)
int x = x-5+y*20 < x*x+y*y ? x-5+y*20 : x*x+y*y;
टर्नरी ऑपरेटर वापरणे बाधक:
- अवजड कोड
- गणना दोनदा केली जाते
int a = x-5+y*20;
int b = x*x+y*y;
int x = a < b ? a : b;
हे लिहिण्याचा हा एक चांगला मार्ग आहे, परंतु तो थोडा अनावश्यक आहे
int x = Math.min(x-5+y*20, x*x+y*y);
अगदी बरोबर 🙂

4. किमान आणि कमाल अनेक संख्या

min()आणि पद्धती वापरण्याचा आणखी एक चांगला मार्ग आहे max().

अनेक संख्या किंवा चलांची किमान (किंवा कमाल) गणना करण्यासाठी. या पद्धतींवर नेस्टेड कॉल करणे खूप सोयीचे आहे.

किमान 3 क्रमांक कसे शोधायचे ते येथे आहे:

Math.min(a, Math.min(b, c))

तर काय? हे अतिशय सोयीचे आहे: किमान दोन संख्यांची गणना करा आणि नंतर ही संख्या आणि तिसरी संख्या परत करा.

किमान चार संख्या त्याच प्रकारे प्राप्त केल्या जातात:

Math.min(a, Math.min(b, Math.min(с, d)))

ते म्हणाले, आम्ही हे सूत्र थोडे अधिक स्पष्टपणे लिहू शकतो:

Math.min(Math.min(a, b), Math.min(c, d))

हे सर्व पद्धतीसाठी समान कार्य करते max().

if-elseऑपरेटर किंवा टर्नरी ऑपरेटर वापरल्याने हे कोड स्निपेट्स थोडे अधिक अवजड होतील. परंतु min()आणि max()पद्धती वापरणे अगदी योग्य आहे.