मैं एक वेबसाइट के लिए 2 डी गेम बना रहा हूं, जहां ब्रह्मांड बहुत बड़ा हो सकता है (मूल रूप से असीम रूप से बड़ा)। प्रारंभ में, ब्रह्मांड 6 सितारों से बना है जो मूल (0, 0) से एक समान दूरी पर हैं। मेरा कार्य अधिक सितारों को उत्पन्न करने में सक्षम होना है जिनके पास "पथ" (किनारे) होंगे जो एक दूसरे से जुड़ते हैं। मैं एक एल्गोरिथ्म कैसे डिजाइन कर सकता हूं जो इन प्रतिबंधों को पूरा करता है:
- सितारे बेतरतीब ढंग से बाहर की ओर उत्पन्न होते हैं। (जैसे (x, y) नए सितारों के लिए निर्देशांक धीरे-धीरे सभी दिशाओं में (0, 0) से बाहर की ओर जाएंगे, अधिमानतः सर्पिल प्रारूप में)
- किनारों को पार नहीं किया जाएगा।
- हालांकि कुछ विचरण होना चाहिए, नए सितारों को बहुत दूर या अन्य सितारों के बहुत करीब नहीं होना चाहिए। (उदाहरण के लिए न्यूनतम त्रिज्या होनी चाहिए)
- किसी भी स्टार / पॉइंट में 3 से अधिक की बहुलता नहीं होनी चाहिए।
- यह देखते हुए कि यह सब एक डेटाबेस में संग्रहीत किया जाएगा, एल्गोरिथ्म बहुत महंगा नहीं हो सकता है। दूसरे शब्दों में, मैं ओ (एन) जटिलता के कुछ हासिल करना पसंद करूंगा (मुझे नहीं पता कि यह संभव है)।
अनिवार्य रूप से, मैं जिस चीज के लिए जा रहा हूं वह एक सर्पिल दिखने वाली आकाशगंगा है जहां सितारे ग्राफ पर बिंदु हैं और सितारों के बीच यात्रा उन सितारों के बीच किनारों द्वारा दर्शाया गया है।
मुझे जिन विशेष चरणों को हल करने की आवश्यकता है वे हैं:
- अन्य सितारों के पड़ोसी आसपास के क्षेत्र में बेतरतीब ढंग से एक बिंदु उत्पन्न करते हैं जो अभी तक 3 की बहुलता नहीं है।
- पहला तारा खोजें जिसमें अभी तक 3 की बहुलता नहीं है जो किनारे के संघर्ष को उत्पन्न नहीं करेगा।
- यदि तारा x इकाइयों की न्यूनतम दूरी है तो दो बिंदुओं के बीच एक बढ़त बनाएं।
मैंने समाधान खोजने की कोशिश की, लेकिन मेरे गणित कौशल (और ग्राफ थ्योरी पर ज्ञान) को बहुत काम करने की आवश्यकता है। इसके अलावा, इस मामले पर किसी भी संसाधन / लिंक की बहुत सराहना की जाएगी।
यहाँ कुछ छद्म कोड है जिसके बारे में मैं सोच रहा था, लेकिन मुझे यकीन नहीं है कि यह काम करेगा और मुझे यकीन है कि यह कुछ 10,000, आदि सितारों के बाद बहुत अच्छा प्रदर्शन नहीं करेगा।
newStar = randomly generated (x, y) within radius of last star from origin
while(newStar has not been connected):
for (star in the known universe):
if(distance between newStar and star > x units):
if(star has < 3 multiplicity):
if(path from newStar to star does not intersect another path):
connect the star to the other star
break;
newStar = new random (x, y) coordinate
इसके अलावा, अगर किसी को इस बारे में कोई सलाह है कि मुझे इसे MySQL डेटाबेस पर कैसे संग्रहीत करना चाहिए, तो मैं भी इसकी सराहना करूंगा।
अंत में, अगर ऊपर कुछ भी समझ में नहीं आता है, तो मैंने एक छवि शामिल की है जिसे मैं नीचे हासिल करना चाहूंगा: