2012-03-10 5 views
5

मुझे एक निश्चित सीमा के भीतर संख्याओं (फ्लोट्स) के यादृच्छिक जोड़े उत्पन्न करने की आवश्यकता है। मूल रूप से उन लोगों के लिए अंक हैं [LAT, LNG] जोड़े (देशांतर - अक्षांश निर्देशांक)PHP यादृच्छिक - exluding/include/floats/negatives और अन्य जानवरों

मैंने सोचा था कि यह बहुत सीधे आगे

<?php echo (rand(0,60).'.'.rand(0,99999999999999).' || '); // yes, a string is ok...?> 

साथ होगा, लेकिन यह मेरे कितने संख्या पर नियंत्रण नहीं दिया फ्लोट प्वाइंट (रिज़ॉल्यूशन) के बाद - जिसे मुझे निश्चित करने की आवश्यकता है।

तो अगले चरण था:

<?php echo (rand(0,60*pow(10,6)))/pow(10,6).' || '; //pow(10,$f) where $ is the resolution ?> 

और इस काम करता है। एक तरह से .. कभी कभी यह

22.212346 || 33.134 || 36.870757 || //(rare , but does happen) 

लेकिन जैसे परिणाम का उत्पादन हे - शून्य के बारे में क्या - निर्देशांक -90 90 (देशांतर) के लिए और -180 180 (लैन) से कर रहे हैं?

echo (rand(0,-180*pow(10,9)))/pow(10,9).' || '; 

कि यह .. क्या करना चाहिए और सभी को एक साथ संयोजन मुझे तो यह सब शुरूआत के बाद

23.0239423525 || -135.937419777 

की तरह किसी भी तरह एक यादृच्छिक स्ट्रिंग देना चाहिए - यहाँ है मेरे सवाल (रों) कर रहे हैं।

  • नौसिखिया होने के नाते मैं हूं - क्या मुझे कुछ याद आ रही है? PHP में नकारात्मक से ऋणात्मक सीमा के साथ यादृच्छिक फ्लोट उत्पन्न करने के लिए कोई अंतर्निहित फ़ंक्शन नहीं है?

  • कभी-कभी फ़ंक्शन केवल 3,4 या 5 को रिज़ॉल्यूशन क्यों करता है अगर इसे वापस करने के लिए कहा जाता है (मैंने कोई एबीएस या राउंड लागू नहीं किया है) - क्या PHP में स्वचालित गोलाकार है? और यदि वहां है, तो इससे कैसे बचें?

  • मैंने देखा है कि "यादृच्छिक" इतना यादृच्छिक नहीं है - उत्पन्न संख्या हमेशा एक-दूसरे के करीब एक सीमा के बीच कम या कम श्रृंखला होती है। क्या पीएचपी यादृच्छिक एक बहुत ही बहुत तेज़ घूर्णन काउंटर है?

  • मैं इस जेनरेटेड रेंज से एक सीमा कैसे बढ़ा सकता हूं ?? (या वास्तव में और पर्वतमाला की सरणी)

मैं जानता हूँ कि इन सवालों का एक बहुत हैं, लेकिन किसी भी मदद/सोचा बहुत अच्छा होगा! (और अगर पहले एक सकारात्मक उत्तर दिया जाता है, बाकी लगभग :-)

उत्तर

3

रैंड अनदेखा किया जा सकता() फ़ंक्शन एक नकारात्मक मिनट ले जा सकते हैं तो हो सकता है आप यह कर सकते हैं:

$num = mt_rand(-180000000, 180000000)/1000000; 
    echo number_format($num, 6); 

अगर आप चाहते हैं दशमलव बिंदु के बाद 6 स्थान।

किसी सीमा को छोड़कर आपको इसे दो चरणों में करना पड़ सकता है। सबसे पहले उन श्रेणियों पर विचार करें जिन्हें आप चाहते हैं। मान लें कि आपके पास 3 श्रेणियां हैं जिनसे आप यादृच्छिक संख्या उत्पन्न करना चाहते हैं। रेंज 1 = -180 से -10, रेंज 2 = 10 - 100 और रेंज 3 = 120 - 180. फिर आप 1 से 3 तक एक यादृच्छिक संख्या उत्पन्न कर सकते हैं, एक श्रेणी चुनने के लिए इसका उपयोग करें और उसके बाद उस श्रेणी में संख्या उत्पन्न करें ।

+0

हाय धन्यवाद - आपका कोड स्पष्ट रूप से अधिक सुरुचिपूर्ण और efficiant है - मुझे 'number_format()' नहीं पता था - लेकिन मैं यादृच्छिक फ़ंक्शन (प्रश्न के दूसरे भाग ..) से एक सीमा को कैसे बढ़ा सकता हूं –

+0

हाय @ ओबमेरक निनिनिन मेरा संपादन देखें। –

+0

धन्यवाद, यह इंगित करता है कि मुझे रैंडम से विशिष्ट सीमा को बाहर करने की आवश्यकता है - और एक रैंडम से रैंडम नहीं - बस आपको एक उदाहरण देने के लिए, मान लीजिए कि मुझे विश्व निर्देशांक उत्पन्न करने की आवश्यकता है लेकिन सभी निर्देशांकों को निकालें उदाहरण "उत्तर कोरिया", या "रेगिस्तान" - तो मेरे पास समन्वय के उन सेट हैं जो मैं उन श्रेणियों को बहिष्कृत कर सकता हूं? सरणी का उपयोग करना मेरा एकमात्र विकल्प है? सरणी बहुत बड़ी होगी .. (जब तक कि मैं किसी भी तरह php में बंद बहुभुज का वर्णन नहीं कर सकता ...) क्योंकि एक रेंज मेरे विचार का एकमात्र विकल्प है। लेकिन वास्तव में कैसे? –

संबंधित मुद्दे