আমি কীভাবে সমানভাবে এক হাত কার্ড আউট করতে পারি?


20

কার্ড খেলার একটি সেট দেওয়া (প্রস্থ এবং উচ্চতা সমেত আয়তক্ষেত্রের চিত্রগুলি) আমি কীভাবে প্রত্যেককে ঘোরান এবং স্থির রাখতে পারি যাতে তারা একটি 'ফ্যান' প্যাটার্নে উপস্থিত হয়, যেমন আপনি বাস্তব জীবনে কার্ডের হাত ধরে থাকবেন। এটি করার জন্য কোন গণিতের প্রয়োজন?

হালনাগাদ

জাভাস্ক্রিপ্টে ব্রাউজার বাস্তবায়নের জন্য এখানে চূড়ান্ত: https://cosmicrells.com/blog/2013/03/16/hand-of-cards/ এবং http://jsfiddle.net/tyyvk/108/


9
স্যার, আপনার হাতে অনেক বেশি টেক্কা লাগছে। টেবিল থেকে দূরে সরে যান।
টমাস অ্যান্ড্রেল

MooTools এর পরবর্তী সংস্করণটি ব্যবহার করতে ফিডলটি আপডেট করা দরকার।
tomdemuyt

উত্তর:


30

তত্ত্ব

আপনি কোন প্ল্যাটফর্মটি প্রয়োগ করছেন তা আপনি নির্দিষ্ট না করেই ভাষা-অজ্ঞাত পদ্ধতিতে অ্যালগরিদমের বিবরণ দেব:

  1. প্রথমে প্রতিটি কার্ডকে একই প্রাথমিক অবস্থান দিয়ে একে অপরের উপরে স্ট্যাক করুন।
  2. তারপরে প্রতিটি কার্ডের জন্য একটি ঘূর্ণন প্রয়োগ করুন (সাধারণত নীচের কোণগুলির মধ্যে একটির চারপাশে কেন্দ্রিক , তবে এই উত্সটিকে চারদিকে ঘোরাতে বাধ্য করা আপনাকে ফ্যানের চেহারাটি টুইঙ্ক করার অনুমতি দেয়)।
  3. কার্ডের সংখ্যা এবং আপনি কতগুলি ছড়িয়ে দিতে চান তার উপর নির্ভর করে প্রতিটি কলের মধ্যে ঘোরার কোণ বৃদ্ধি করুন

যে ঘূর্ণন কার্ডের নীচে কোণে এক চারপাশে কেন্দ্রীভূত হয় (অথবা কোণ নিকটে) স্পষ্ট দিকে তাকিয়ে থেকে হওয়া উচিত:

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


বাস্তবায়ন

এটি কীভাবে বাস্তবায়ন করা যায় তা নির্ভর করে এটি আপনার প্ল্যাটফর্মের উপর। এক্সএনএ-তে আপনি 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();

এবং ফলাফল:

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


7
আমি যুক্ত করব যে বিভিন্ন ঘূর্ণনের কেন্দ্র ব্যবহার করে চেহারাটি টুইঙ্ক করা যেতে পারে, আপনি যদি একটি ছোট চাপ তোলা চান তবে আপনার কার্ডের নীচে অবস্থিত একটি ঘূর্ণন পয়েন্ট ব্যবহার করা উচিত।
আআআআআআআআআআআআআআআআআআআআআআআআআআআ

@eBusiness তুমি ঠিক আছে, আমি যে যোগ করব।
ডেভিড Gouveia,

অনেক অনেক ধন্যবাদ ডেভিড! আপনি জাভাস্ক্রিপ্টে আপনি যে কোডটি দেখিয়েছেন তা এখানে প্রয়োগ করেছি: jsfiddle.net/tyyvk/7
সিম্বিয়েন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.