তত্ত্ব
আপনি কোন প্ল্যাটফর্মটি প্রয়োগ করছেন তা আপনি নির্দিষ্ট না করেই ভাষা-অজ্ঞাত পদ্ধতিতে অ্যালগরিদমের বিবরণ দেব:
- প্রথমে প্রতিটি কার্ডকে একই প্রাথমিক অবস্থান দিয়ে একে অপরের উপরে স্ট্যাক করুন।
- তারপরে প্রতিটি কার্ডের জন্য একটি ঘূর্ণন প্রয়োগ করুন (সাধারণত নীচের কোণগুলির মধ্যে একটির চারপাশে কেন্দ্রিক , তবে এই উত্সটিকে চারদিকে ঘোরাতে বাধ্য করা আপনাকে ফ্যানের চেহারাটি টুইঙ্ক করার অনুমতি দেয়)।
- কার্ডের সংখ্যা এবং আপনি কতগুলি ছড়িয়ে দিতে চান তার উপর নির্ভর করে প্রতিটি কলের মধ্যে ঘোরার কোণ বৃদ্ধি করুন ।
যে ঘূর্ণন কার্ডের নীচে কোণে এক চারপাশে কেন্দ্রীভূত হয় (অথবা কোণ নিকটে) স্পষ্ট দিকে তাকিয়ে থেকে হওয়া উচিত:
বাস্তবায়ন
এটি কীভাবে বাস্তবায়ন করা যায় তা নির্ভর করে এটি আপনার প্ল্যাটফর্মের উপর। এক্সএনএ-তে আপনি SpriteBatch.Draw
আপনার আবর্তনের কেন্দ্র পরিবর্তন করতে কেবল অরিজিন প্যারামিটার ব্যবহার করতে পারেন ।
নীচের কোডটি দিয়ে আমি যা পেয়েছি তা এখানে রয়েছে (এটি আরও ভাল দেখানোর জন্য উত্সটিতে কয়েকটি টুইটের সাথে - মূলত উত্সটি ডান কোণার কাছাকাছি শুরু হয় এবং বাম কোণার কাছে শেষ হয়):
int cards = 20;
float range = MathHelper.ToRadians(90);
float initialAngle = MathHelper.ToRadians(-45);
float increment = range / cards;
Vector2 leftCorner = new Vector2(0, texture.Height * 0.9f);
Vector2 rightCorner = new Vector2(texture.Width, texture.Height * 0.9f);
Vector2 fanPosition = new Vector2(400, 300);
spriteBatch.Begin();
for (float angle = 0; angle < range; angle+=increment)
{
float cardAngle = initialAngle + angle;
Vector2 cardOrigin = Vector2.Lerp(rightCorner, leftCorner, angle / range);
spriteBatch.Draw(texture, fanPosition, null, Color.White, cardAngle, cardOrigin, 1f, SpriteEffects.None, 0f);
}
spriteBatch.End();
এবং ফলাফল: