Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

बिल्ट-इन PHP मैथ फंक्शंस के साथ त्रिकोणमिति, रेंडम नंबर और भी बहुत कुछ

by
Difficulty:BeginnerLength:MediumLanguages:

Hindi (हिंदी) translation by Ashish Rampal (you can also view the original English article)

प्रोग्रामिंग के दौरान बेसिक मैथ्स का काफी इस्तेमाल किया जाता है। कोड लिखते समय हमें अलग-अलग वैल्यू को कंपेयर, जोड़ना, गुणा करना, घटाना और विभाजित करना होता है।

कभी-कभी, एक प्रोग्राम में मैथ की आवश्यकता अधिक हो सकती है। आपको लोगरिथ्मिक (logarithmic), त्रिकोणमिति (trignometric) या एक्सपोनेंशियल (exponential) फंक्शंस के साथ काम करने की आवश्यकता हो सकती है। इस ट्यूटोरियल में, मैं उदाहरण के साथ PHP में इन फंक्शंस में से प्रत्येक का उपयोग करने के बारे में चर्चा करूंगा।

यह ट्यूटोरियल आपको त्रिकोणमिति, एक्सपोनेटिएशन और लोगरिथ्म गणना करने के लिए PHP में बिल्ट इन मैथ फंक्शंस से परिचित कराएगा। हम रेंडम नंबर्स को राउंडिंग और जनरेट करके भी देखेंगे।

PHP में त्रिकोणमिति फंक्शंस

आप sin($angle), cos($angle), और tan($angle) का उपयोग करके रेडियंस (radians) में दिए गए विभिन्न एंगल्स के sin, cos, और tangent की वैल्यू की गणना कर सकते हैं। वह float वैल्यूज को रिटन करते हैं, और उन में पास किए गए एंगल का माप रेडियन में होता है।

इसका मतलब यह है कि जब आप केवल tan(45) को कैलकुलेट करते हैं, तो आपको आउटपुट के रूप में 1 नहीं मिलेगा, क्योंकि आप वास्तव में 45 रेडियन पर tangent की वैल्यू की गणना करेंगे, जो लगभग 2,578 डिग्री है। सौभाग्य से, PHP के पास रेडियन को डिग्री में और इसके उल्टा भी परिवर्तित करने के लिए दो बेहद उपयोगी फंक्शंस है। यह फंक्शन rad2deg() और deg2rad() है। इसलिए, यदि आप वास्तव में 45 डिग्री के tangent की वैल्यू को कैलकुलेट करना चाहते हैं, तो आप tan(deg2rad(45)) लिखना होगा।

यह उल्लेखनीय है कि cosec(), sec(), या cot() की वैल्यू को कैलकुलेट करने के लिए कोई प्रत्यक्ष PHP का फंक्शन नहीं होता है। हालांकि, यह वैल्यू केवल sin(), cos(), और tan() के रेसिप्रोकल है, इसलिए आप अभी भी इनकी वैल्यू स्कोर इनडायरेक्टली कैलकुलेट कर सकते हैं।

आप इसे इनवर्स भी कर सकते हैं और उस एंगल को कैलकुलेट कर सकते हैं जिस पर एक त्रिकोणमिति एंगल की एक विशेष वैल्यू है। इन फंक्शन स्कोर asin(), acos(), और atan() कहा जाता है। एक बात जो आपको याद रखनी है, वह यह है कि sin और cos की वैल्यू किसी भी एंगल के लिए -1 से 1 की रेंज से आगे नहीं बढ़ सकती है। इसका मतलब यह है कि asin() और acos() केवल वैलेट अरगुमेंट्स के रूप में रेंज -1 में वैल्यूज को स्वीकार कर सकते हैं। इस रेंज के बाहर की वैल्यू आपको NaN देगी।

त्रिकोणमिति में बहुत सारे एप्लीकेशंस होते हैं जैसे प्रोजेक्टाइल के ट्राजेक्टोरी को डिटरमाइंन करना या अलग अलग ऑब्जेक्ट्स की हाइट और डिस्टेंस, इसलिए इन फंक्शन तक पहुंच होना निश्चित रूप से सहायक होता है यदि आप खुद लिख रहे हैं जो इन सिचुएशंस में आते हैं।

जब आप रेडियल और एंगुलर वैल्यूज का उपयोग कर के विभिन्न एलिमेंट्स को ड्रॉ करना चाहते हैं तो यह फंक्शन भी बहुत सहायक होते हैं। मान ले कि आप एक बड़े सर्कल कि चारों ओर एक समान दूरी पर सर्कल्स का एक पैटर्न बनाना चाहते हैं। यदि आपने Envato Tuts+ पर PHP GD शेप्स के बारे में ट्यूटोरियल पड़ा है, तो आपको शायद याद हो कि किसी भी एप्स को ड्रॉ करने से आपको x, y कोऑर्डिनेट के रूप में कोऑर्डिनेट पास करने की आवश्यकता होती है, लेकिन पोलर कोऑर्डिनेट्स के साथ सर्कुलर पैटर्न ड्रॉ करना आसान है।

इस मामले में इन त्रिकोणमिति फंक्शंस का उपयोग करने से आपको सर्कुलर कोऑर्डिनेट को कार्टिसिअन फॉर्म में परिवर्तित करने के लिए sin() और cos() का उपयोग करके अपनी जरूरत के हिसाब से फिगर ड्रॉ करने में मदद मिलेगी। यहां एक उदाहरण है:

निम्नलिखित इमेज ऊपर दिए गए PHP कोड का अंतिम परिणाम दिखाती है।

Using PHP GD with Trigonometric functions

एक्स्पोनेंशियल और लोगरिथ्म फंक्शन

PHP में कुछ एक्स्पोनेंशियल और लोगरिथ्म फंक्शंस भी हैं। exp($value) फंक्शन फ्लोट $value की पावर कांस्टेंट e तक बढ़ा कर रिटर्न करेगा। इसी प्रकार, आप log($arg, $base) फंक्शन का उपयोग करके किसी भी बेस को दिए गए नंबर के लोगरिथ्म को कैलकुलेट कर सकता है। यदि $base को छोड़ दिया जाता है, तो लोगरिथ्म की कैलकुलेशन नेचुरल बेस e का उपयोग करके की जाएगी। यदि आप किसी नंबर के लोगरिथ्म की बेस 10 के साथ कैलकुलेशन करना चाहे, तो आप बस log10($arg) फंक्शन का प्रयोग कर सकते हैं।

एक और फंक्शन जो आपको उपयोगी लग सकता है वह है pow($base, $exp), जो $base को $exp की पावर तक बढ़ाकर रिटर्न करता है। आप में से कुछ शायद ** ऑपरेटर का प्रयोग करना अधिक पसंद करेंगे। एक्सप्रेशन $a**$b वहीं रिजल्ट देता है जो pow($a, $b) देगा। हालांकि, आपको $a**$b का प्रयोग करने पर कभी कभी कुछ सिचुएशंस में गलत रिजल्ट मिल सकता है। उदाहरण के लिए, -1**0.5 का उत्तर -1 आएगा, जो कि गलत है। इसी एक्सप्रेशन को pow(-1, 0.5) का प्रयोग करके कैलकुलेट करें तो यह आपको सही वैल्यू देगा, जो कि NaN है।

अन्य उपयोगी मैथमेटिकल फंक्शन

नंबर्स को राउंड करना

और भी बहुत सारे उपयोगी मैथमेटिकल फंक्शंस होते हैं। आप फ्रेक्शंस या डेसिमल नंबर्स को उनके सबसे पास के इन्टिजर में राउंड कर सकते हैं। इसके लिए आपको ceil(float $value) फंक्शन का प्रयोग करना होगा। यह दोनों 2.1 और 2.9 को 3 में कन्वर्ट कर देगा। इसी प्रकार, आप फ्रेक्शंस या डेसिमल नंबर्स को नीचे की ओर सबसे पास के इन्टिजर तक राउंड कर सकते हैं। इसके लिए floor(float $value) फंक्शन का प्रयोग करना होगा। यह दोनों 2.1 और 2.9 को 2 में कन्वर्ट करेगा।

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

आप अक्सर किसी नंबर को निकटतम इन्टिजर से ऊपर या नीचे राउंड करना चाहेंगे। उदाहरण के लिए, आप 2.1 को 2 से बदलना चाह सकते हैं लेकिन 2.9 को 3 से। यह round($value, $precision, $mode) फंक्शन के साथ आसानी से किया जा सकता है। $precision पैरामीटर दशमलव स्थानों की संख्या को राउंड करने के लिए डिटरमाइंन करता है। 0 की डिफॉल्ट वैल्यू केवल इन्टिजर को रिटर्न करेगा। तीसरे $mode पैरामीटर का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या होता है यदि आप किसी नंबर को राउंड करना चाहते हैं और वह नंबर बिल्कुल बीच में पड़ा हुआ है। आप इसका उपयोग यह निर्देश करने के लिए कर सकते हैं कि क्या 3.5 को 3 में बदलना चाहिए या 4 में।

मिनिमम और मैक्सिमम

PHP में दो फंक्शन होते हैं जिन्हें min($values) और max($values) कहा जाता है, जिससे आपको नंबर्स के एक सेट या ऐरे में मिनिमम और मैक्सिमम वैल्यूज को डिटरमाईन करने में मदद मिलती है। यह फंक्शन दो ऐरे और एक स्ट्रिंग जैसे अलग-अलग प्रकार के पैरामीटर्स को स्वीकार कर सकते हैं। आप को डॉक्यूमेंटेशन पर एक नजर डालनी चाहिए कि उनकी तुलना कैसे की जाएगी।

इन्टिजर डिवीजन

आप intdiv($dividend, $divisor) फंक्शन का उपयोग करके PHP में इन्टिजर डिवीजन भी कर सकते हैं। इस मामले में, डिवीजन के बाद शेषफल का केवल इंटीग्रल पार्ट रिटर्न हो सकता है। इसी तरह, आप fmod($dividend, $divisor) फन उपयोग करके दो अरगुमेंट के डिवीजन के बाद रिमेंडर या मॉडुलो भी प्राप्त कर सकते हैं। रिटर्न की गई वैल्यू हमेशा और रिजल्ट में $divisor से कम होगी।

कुछ अन्य उपयोगी फंक्शन है जैसे is_nan($value), is_finite($value) और is_infinite($val) जो यह निर्धारित करने के लिए उपयोग किए जा सकते हैं की क्या वैल्यू एक नंबर है और. यदि यह एक नंबर है, चाहे यह फिनाइट हो या इनफिनाइट। याद रखें कि PHP किसी भी वैल्यू पर विचार करता है जो एक प्लॉट में फिट होने के लिए बहुत बड़ी है और इनफिनाइट है। तो is_finite() 100 फैक्टोरियल के लिए true लेकिन 1000 फैक्टोरियल के लिए false रिटर्न करेगा।

PHP में रैंडम नंबर जनरेट करना

कुछ स्थितियों में रैंडम नंबर काफी उपयोगी साबित होता है। आप अपने एप्लीकेशन के लिए “random” डाटा जनरेट करने के लिए या गेम में दुश्मन के इंस्टेंस को फैलाने के लिए इन का उपयोग कर सकते हैं, आदि। यह याद रखना बहुत महत्वपूर्ण है कि इस सेक्शन में हम जिन भी फंक्शन पर चर्चा करते हैं, उनमें से कोई भी क्रिप्टोग्राफी रूप से सुरक्षित रेंडम नंबर जनरेट नहीं करता है। यह फंक्शन केवल उन स्थितियों में उपयोग किए जाने के लिए है, जहां सुरक्षा कोई समस्या नहीं है, जैसे विजिटर्स को रिपीट रेंडम ग्रीटिंग टेक्स्ट को शो करना या रेंडम स्टैटिसटिकल डाटा को जनरेट करना।

फंक्शंस rand($min, $max) और mt_rand($min, $max) दिए गए वैल्यूज के बीच पॉजिटिव रेंडम इन्टिजर को जनरेट कर सकते हैं जिसमें $min और $max वैल्यू शामिल हो। जब फंक्शंस को बिना किसी पैरामीटर के कॉल किया जाता है, तो वह 0 और getrandmax() के बीच रेंडम नंबर जनरेट करते हैं। आप getrandmax() की वैल्यू को echo कर सकते हैं यह देखने के लिए की आपके प्लेटफार्म में सबसे बड़ा वह कौन सा नंबर है जिसको यह रेंडम नंबर जनरेट कर सकता है।

फंक्शन mt_rand() rand() की तुलना में 4 गुना तेज है और false रिटर्न करता है यदि $max $min से छोटा हो। PHP 7.1.0 के बाद के वर्जन से rand() को वास्तव में mt_rand() का उपनाम (alias) माना जाता है। एकमात्र अंतर यह है कि rand() अभी भी कोई एरर नहीं देता यदि $max $min से कम हो इससे बैकवर्ड कंपैटिबिलिटी बनी रहती है।

यहां 0 और 100 मिलियन बार रेंडम वैल्यू जनरेट करने के लिए एक लूप बनाया गया है। जैसा कि आप देख सकते हैं, 0, 50 और 100 की वैल्यू मामूली उतार-चढ़ाव के साथ लगभग 10,000 बाहर जनरेट होती हैं।

इन दोनों फंक्शंस में srand() और mt_srand() नाम से रेंडम नंबर जनरेट करने के लिए एक सीड प्रदान करने के लिए अपने स्वयं के सीडर फंक्शन भी हैं। आपको बस यह ध्यान रखना चाहिए कि आप केवल अपने प्रोग्राम में एक बार srand() और mt_srand() कॉल करें। rand() और mt_rand() के लिए हर कॉल से पहले उन्हें कॉल करना आपको हर बार एक ही “random” नंबर देगा।

अंतिम विचार

PHP बहुत सारे बिल्ट-इन फंक्शंस के साथ आता है, जो आपके दिन प्रतिदिन के कंप्यूटेशन की जरूरतों को पूरा करता है। आप इन फंक्शंस का उपयोग स्वयं GCD, LCM और फैक्टोरियल जैसी जटिल कैलकुलेशन करने के लिए कर सकते हैं।

इन फंक्शन का उपयोग करते समय आपको कुछ बातें याद रखनी चाहिए। उदाहरण के लिए, floor() और ceil() जैसे फंक्शन द्वारा रिटर्न की गई वैल्यू इन्टिजर होती हैं, लेकिन यह फिर भी एक फ्लोट होता है। इसी तरह, सभी त्रिकोणमिति फंक्शन अपने एंगल्स को रेडियन में दिए जाने की अपेक्षा करते हैं। आपको गलत परिणाम मिलेंगे यदि आप उन्हें एक एंगल वैल्यू देते हैं जिसे आप डिग्री मेजर के रूप में ट्रीट करना चाहते हो। इसलिए सुनिश्चित करें कि आप डॉक्यूमेंटेशन में इन सभी फंक्शन के रिटर्न वैल्यू और अपेक्षित अरगुमेंट्स की जांच कर लें।

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.