ষড়ভুজ গ্রিডে টাইলগুলির রিং পান


17

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

আমি জানি যে প্রতিটি অফসেটের সাথে 6 টি টাইল যুক্ত করা হয়।

  • অফসেট 1 আপনাকে 6 টি টাইল দেয় (প্রথম সংলগ্ন টাইলস)
  • অফসেট 2 আপনাকে 12 দেয়।
  • অফসেট 3 আপনাকে 18 দেয় etc.

প্রতিটি অফসেট সহ 6 টির ধ্রুবক বৃদ্ধি রয়েছে। সুতরাং আমি ধরে নিলাম একটি নিয়ম থাকা উচিত যা এই অফসেটগুলির সাথে খাপ খায়। আমি এটিকে ঠিক বুঝতে পারি না। যে কেউ?

উত্তর:


23

N এর ব্যাসার্ধের সাথে একটি ষড়ভুজীয় রিংটি straight টি সরল রেখা নিয়ে গঠিত, প্রতিটি দৈর্ঘ্য N সহ - নীচে আমার অত্যন্ত অপরিশোধিত উদাহরণ দেখুন :) এন = 2 এর জন্য:

এখানে চিত্র বর্ণনা লিখুন

তীরগুলি প্রতিটি 2 টি হেক্সকে coverেকে দেয়।

আমি ধরে নিলাম আপনার কয়েকটি ফাংশন রয়েছে যা আপনাকে প্রতিবেশী টালি একটি নির্দিষ্ট দিকের মতো দেয় যেমন উত্তর (), দক্ষিণ-পূর্ব () ইত্যাদি So

var point = startingPoint.north(N)
for i = 0..N-1:
    result.add(point)
    point = point.southeast(1);
for i = 0..N-1:
    result.add(point)
    point = point.south(1);
for i = 0..N-1:
    result.add(point)
    point = point.southwest(1);
for i = 0..N-1:
    result.add(point)
    point = point.northwest(1);
for i = 0..N-1:
    result.add(point)
    point = point.north(1);
for i = 0..N-1:
    result.add(point)
    point = point.northeast(1);

নোট করুন যে এটি প্রান্তের ক্ষেত্রে N = 1, 6 টি টাইল ফিরে আসা এবং N = 0 খালি সেট ফিরে আসার ক্ষেত্রেও কাজ করবে।

আমি জানি কোডটি নিখুঁত নয় :) এখানে কিছু অপ্রয়োজনীয়তা রয়েছে। আমার প্রকল্পগুলিতে নিয়মিত টাইলযুক্ত মানচিত্রগুলি ব্যবহার করে (ষড়্ভুজ বা অন্যথায়) আমার সাধারণত একটি এনাম "ডাইরেক্টেশন" থাকে, যা আমাকে আরও সুষ্ঠুভাবে এটি করতে দেয়:

var point = startingPoint.inDir(N, Direction.North)
var dir = Direction.SouthEast.
for d = 0..Direction.count():
    for i = 0..N-1:
        result.add(point)
        point = point.inDir(1, dir);
    dir = nextDirection(dir);

এটি আমাকে সঠিক দিকে ঠেলে দেবে। ধন্যবাদ!
সিডার

2
নোট করুন যে কোড নমুনাটি প্রথম পাঁচটি বিভাগের জন্য সদৃশ পয়েন্ট যুক্ত করবে। তবে এটি একটি দুর্দান্ত উত্তর।
মাইকেলহাউস

@ বাইট 56 হ্যাঁ আমি বুঝতে পেরেছি। তবে কমপক্ষে আমি শিফটের মধ্যে সংযোগটি দেখতে চাই!
সিডার

1
@ বাইট 56 সত্যি? হুঁ। আমি এটিকে এড়াতে চেষ্টা করেছি ... 0..N-1 এন = 2 এর জন্য 0.1 দেয়, তাই আমি = 0 এবং i = 1 যা 2 মান। প্রতি বার থেকে 2 টি মান 6 টি দিক 12 টাইল হয়, যেমনটি হওয়া উচিত ...?
লিওসান

নাঃ। তুমি ঠিক বলছো. যেহেতু প্রতিটি লুপ সর্বশেষ লুপ থেকে একটি পয়েন্ট যুক্ত করছে আমি লুপগুলির জন্য একে একে বন্ধ ছিলাম, আমার ভুল। এটি একটি চালাক অ্যালগরিদম।
মাইকেলহাউস

2

আমি এই নিবন্ধটি হেক্সাগোনাল গ্রিড অ্যালগরিদমগুলির জন্য খুব ভাল রেফারেন্স হিসাবে পেয়েছি এবং "দূরত্ব" এর এর বিভাগটি দুটি টাইলের মধ্যে পদক্ষেপের সংখ্যা নির্ধারণের জন্য একটি পদ্ধতি সরবরাহ করে। যদি আপনি আপনার অক্ষীয় স্থানাঙ্ক (xy) কে কিউব স্থানাঙ্কে (xyz) রূপান্তর করেন তবে দূরত্ব সর্বদা দুটি টাইলের মধ্যে স্থানাঙ্কের অফসেটগুলির বৃহত্তম বা সর্বোচ্চ (| dx |, | ডাই |, | ডিজে |) এর সমান।

পছন্দসই দূরত্বে টাইলগুলির জন্য পুরো গ্রিডের একটি বিস্তৃত অনুসন্ধান হে(এন2) গ্রিডের মাত্রা সহ তবে এটি একটি সাধারণ বাস্তবায়ন যা ছোট গ্রিডের জন্য ভাল কাজ করে।

এখানে চিত্র বর্ণনা লিখুন

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