3 এর সর্বাধিক গুণিতক সহ উত্স থেকে বাহু এবং প্রান্তগুলি প্রান্তিককরণের জন্য অ্যালগরিদম


11

আমি এমন কোনও ওয়েবসাইটের জন্য একটি 2 ডি গেম তৈরি করছি যেখানে মহাবিশ্বটি অত্যন্ত বড় হতে পারে (মূলত অসীমভাবে বড়)। প্রাথমিকভাবে, মহাবিশ্বটি 6 টি তারা নিয়ে গঠিত যা উত্স থেকে সমান দূরত্ব (0, 0)। আমার কাজটি হ'ল আরও তারা তৈরি করতে সক্ষম হবেন যাতে "পাথ" (প্রান্ত) থাকবে যা একে অপরের সাথে সংযুক্ত থাকে। এই বিধিনিষেধগুলি মেটাতে আমি কীভাবে একটি অ্যালগরিদম ডিজাইন করতে পারি:

  1. তারাগুলি এলোমেলোভাবে বাহ্যিকভাবে উত্পন্ন হয়। (যেমন (x, y) নতুন তারার স্থানাঙ্কগুলি ধীরে ধীরে সমস্ত দিক (0, 0) থেকে বাহিরে চলে যাবে, সাধারণত সর্পিল আকারে)
  2. প্রান্তগুলি অতিক্রম করবে না।
  3. যদিও কিছু বৈকল্পিকতা থাকা উচিত, নতুন তারার খুব বেশি বা অন্য তারার খুব বেশি কাছাকাছি হওয়া উচিত নয়। (যেমন, সর্বনিম্ন ব্যাসার্ধ থাকতে হবে)
  4. কোনও তারকা / পয়েন্টের 3 এর বেশিের গুণমান থাকা উচিত নয়।
  5. এই সমস্তটি একটি ডেটাবেসে সংরক্ষণ করা হবে তা প্রদত্ত যে, অ্যালগরিদম খুব ব্যয়বহুল হতে পারে না। অন্য কথায়, আমি ও (এন) জটিলতার কিছু অর্জন করতে পছন্দ করব (এটি সম্ভব কিনা তা আমি জানি না)।

মূলত, আমি যাচ্ছি এটি একটি সর্পিল সন্ধানকারী গ্যালাক্সি যেখানে নক্ষত্রগুলি গ্রাফের পয়েন্ট এবং তারার মধ্যে ভ্রমণ সেই নক্ষত্রগুলির মধ্যে প্রান্তগুলি দ্বারা চিত্রিত হয়েছে।

আমার যে বিশেষ পদক্ষেপগুলি সমাধান করতে হবে তা হ'ল:

  1. এলোমেলোভাবে অন্যান্য তারাগুলির প্রতিবেশী আশেপাশে এমন একটি পয়েন্ট উত্পন্ন করুন যার কাছে এখনও 3 এর গুণমান নেই।
  2. এমন প্রথম তারাটি সন্ধান করুন যেখানে এখনও 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

এছাড়াও, যদি আমার কোনও মাইএসকিউএল ডাটাবেসে এটি সঞ্চয় করা উচিত সে সম্পর্কে কারও কোনও পরামর্শ থাকে তবে আমি এটিরও প্রশংসা করব।

পরিশেষে, যদি উপরোক্ত কিছু বোঝা না যায় তবে আমি নীচে আমি কী অর্জন করতে চাই তার একটি চিত্র অন্তর্ভুক্ত করেছি:এবং ইত্যাদি, প্রচুর তারা ...


1
এই মহাবিশ্বের একজন ভ্রমণকারী সম্ভবত এক দিকে চলে যাবে, যার অর্থ যদি আপনি তারার বাইরে চলে যান তবে আপনাকে উত্স থেকে সমস্ত দিকে নক্ষত্র তৈরি করতে হবে। এক বিরক্তিকর ব্যবহারকারী অন্য কথায় আপনার ডাটাবেস ভঙ্গ করতে পারে। আপনি কি এই সম্ভাবনাটি বিবেচনা করেছেন (ধরে নিলে এটি একটি সমস্যা হতে পারে)?
নীল

2
এছাড়াও আরেকটি ধারণা, তারার স্থাপনের কথা মনে করার দরকার নেই। যদি আপনি তারকাদের একটি পুনরুত্পাদনযোগ্য প্রজন্ম ব্যবহার করেন, তবে আপনি তারারগুলি তৈরি করতে পারেন যা ব্যবহারকারী এমনভাবে দেখতে পেল যে ভবিষ্যতে stars তারাগুলি একইভাবে উত্পন্ন হবে। অর্থ, আপনার ডাটাবেসের কেবল তারার উপর তথ্য সংরক্ষণ করা দরকার। এটির অবস্থান এটির পরিচয়।
নীল

1
প্রতিটি উত্পন্ন নক্ষত্রের হুবহু 3 টির গুণমান থাকলে আপনি কী করবেন তাই 1 পদক্ষেপ ব্যর্থ হবে? আপনার ছবিতে 4 এর গুণমানের সাথে কেন এক বিন্দু রয়েছে, তা কি ত্রুটি?
ডক ব্রাউন

1
না। আপনি যদি অনুমানযোগ্য উপায়ে তারা তৈরি করতে পারেন তবে মনে হবে তারা চলে গেলে সবসময় সেখানে থাকে এবং ফিরে আসে। এটি কেবলমাত্র অ্যালগরিদম এবং বীজ যা পরিবর্তিত হয় না।
নীল

2
@ জেএফ দেখুন কোনও মানুষের আকাশ নয় । লোকটি আক্ষরিক অর্থে একটি মহাবিশ্ব তৈরি করে। তিনি কেবল এমন গ্রহগুলি সংরক্ষণ করেন যা খেলোয়াড়দের দ্বারা পরিদর্শন করা হয়েছিল এবং তবুও বিদ্যমান গ্রহগুলি তাদের নিজস্ব স্পটগুলিতে রয়ে গেছে। এগুলি সমস্ত এলোমেলো সংখ্যা উত্পন্ন করতে উপযুক্ত বীজ ব্যবহারের উপর ভিত্তি করে।
নিল

উত্তর:


2

পরামর্শ: অভ্যন্তরীণ মহাবিশ্বের নেটওয়ার্কটি পুরোপুরি অর্ডার, অ্যালগরিদমিক এবং তুলনামূলকভাবে সহজ রাখুন। আপনি শুধুমাত্র মহাবিশ্ব প্রয়োজন র্যান্ডম দেখুন যখন এটি ব্যবহারকারী পর্দায় প্রদর্শিত । ব্যবহারকারীর প্রদর্শনের জন্য কেবল স্টার পজিশনে এলোমেলো অফসেট প্রয়োগ করুন।

সমস্যা: প্রতিটি তারার জন্য র্যান্ডম অফসেট গণনার সর্বাধিক সুস্পষ্ট পদ্ধতি অন্তর্নিহিত সত্য কাঠামোটি আড়াল করার খুব ভাল কাজ করবে না। একে অপরের সাথে সংঘর্ষের বা পাথ পেরোনোর ​​ঝুঁকির আগে আপনি কেবল অল্প পরিমাণে এলোমেলো করতে পারেন।

সমাধান: আপনি যদি সমন্বিত অ-স্থানীয় এলোমেলোতা প্রয়োগ করেন তবে আপনি বৃহত্তর এলোমেলো বিকৃতি প্রয়োগ করতে পারেন এবং আরও অনেক এলোমেলো এবং আকর্ষণীয় দেখায় মহাবিশ্ব পেতে পারেন। তারাগুলি রাবারের শীটে রাখার কল্পনা করুন এবং এলোমেলোভাবে চাদরের বিভিন্ন অংশ প্রসারিত এবং স্কোচিংয়ের কল্পনা করুন। এটি একটি দীর্ঘ দূরত্বের দ্বারা তারাগুলির পুরো গোষ্ঠী স্থানান্তর করতে পারে। তারা কখনও সংঘর্ষ বা ক্রস করবে না কারণ কাছাকাছি তারারগুলি একে অপরের সাথে প্রসারিত এবং স্কোয়াশ।

এটি কীভাবে করবেন: ফ্র্যাক্টাল টেরিন জেনারেটর সন্ধান করুন। এর জন্য প্রচুর বিনামূল্যে এবং ওপেন কোড রয়েছে। আপনার কেবলমাত্র মূল কোড দরকার যা মানচিত্রে প্রতিটি পয়েন্টের জন্য উচ্চতার মান উত্পন্ন করে। আমরা এটিকে অন্যভাবে ব্যবহার করতে যাচ্ছি। TWO স্বতন্ত্র ভূখণ্ড-উচ্চতা মানচিত্র তৈরি করতে কোডটি ব্যবহার করুন। তারার সত্যিকারের এক্স, ওয়াই অবস্থান দিয়ে শুরু করুন, প্রতিটি মানচিত্রে সেই অবস্থানটি দেখুন, তারার এক্স প্রদর্শন অবস্থানটি অফসেট করতে একটি মানচিত্রের মান ব্যবহার করুন এবং তারার ওয়াই প্রদর্শন অবস্থানটি অফসেট করতে অন্য মানচিত্রের মানটি ব্যবহার করুন। আপনাকে কয়েকটি স্কেলিং ফ্যাক্টরগুলির সাথে খেলতে হবে, তবে এটি আপনাকে এলোমেলোভাবে রেপযুক্ত রাবার শীটের প্রভাব দিতে পারে। নক্ষত্রের অবস্থানের বৃহত প্রকরণগুলি অন্তর্নিহিত আদেশিত অবস্থানগুলি সম্পূর্ণরূপে আড়াল করে। এলোমেলোতার ফ্র্যাক্টাল প্রকৃতি খুব প্রাকৃতিক চেহারার প্রভাব দেবে,

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.