আইসোমেট্রিক সূচকগুলিতে মাউস স্থানাঙ্কগুলি কীভাবে রূপান্তর করবেন?


21

আমি টাইল 64x32 সহ আইসোমেট্রিক মানচিত্র আঁকছি :

const Offset = 160;
int X, Y;

for (int a=0; a < 6; a++)
  for (int b=0; b < 6; b++) {
    X = a * 32 - b * 32 + Offset;
    Y = a * 16 + b * 16;
    DrawTile(X, Y, tile);
  }

চিত্র, এই কোডটি চিত্রিত করছে:

চিত্র, এই কোডটি চিত্রিত করছে:

প্রিয় পেশাদাররা, দয়া করে, কোনও ঘরের আইসোমেট্রিক সূচকগুলিতে মাউস স্থানাঙ্কের রূপান্তরের সূত্রে সহায়তা করুন। উদাহরণ: (105; 100) -> [1; 4]।



পার্শ্ব দ্রষ্টব্য: আপনি যদি পরিবর্তনশীল হিসাবে পূর্ববর্তী মানটি অ্যাক্সেস করতে না চানwhile(val = arr[i++]) বা যেমন অনুরূপ নির্মাণ করেন তবে এটি ব্যবহার করবেন না । ব্যবহার করুন ++aএবং ++bপরিবর্তে।
মার্টিন সোজকা

উত্তর:


25

আপনাকে টাইল-স্পেসের স্থানাঙ্ক থেকে স্ক্রিন-স্পেস স্থানাঙ্কগুলিতে রূপান্তর ম্যাট্রিক্স নির্ধারণ করতে হবে , তারপরে এর জন্য বিপরীতমূলক ম্যাট্রিক্স গণনা করুন , যা স্ক্রিন-স্পেস স্থানাঙ্কগুলিতে প্রয়োগ করা হলে সেগুলি টাইল-স্পেসের ক্ষেত্রে রূপান্তর করে।

উপায় দ্বারা: আপনার অফসেটটি এমন কোনও জায়গায় নির্দেশ করছে যা কোনও বুদ্ধিমান সমন্বয় ব্যবস্থাতে (0.0, 1.0) হবে তবে এটি কোনও বড় সমস্যা নয়, কেবল কিছু মনে রাখা। এর অর্থ হল আপনার রূপান্তরিত স্থানাঙ্ক সিস্টেমের উত্সের অফসেটটি (অফসেট +32, 0) এ রয়েছে।


নির্দিষ্ট ক্ষেত্রে

আপনি মূলত টাইল-স্পেস (ক, খ) স্থানাঙ্কগুলিকে স্ক্রিন-স্পেস (এক্স, ওয়াই) স্থানাঙ্কে রূপান্তর করার জন্য যা করছেন তা হ'ল এটি নিম্নলিখিত রূপান্তর ম্যাট্রিক্সের মাধ্যমে চালানো:

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

সংজ্ঞা: টাইল (0, 0) এর জন্য a এবং b এর পরিধি [0.0, 1.0) এর সাথে রয়েছে (0.0, 0.0) উপরের কোণায়, (1.0, 1.0) নীচের কোণায়, (0.0, 1.0) বাম কোণে এবং (1.0, 0.0) পর্দার স্থানের ডান কোণে।

অনুবাদকে ম্যাট্রিক্সে অন্তর্ভুক্ত করতে সক্ষম হওয়ার জন্য আমরা স্থায়ী তৃতীয় স্থানাঙ্কের মাধ্যমে স্থানাঙ্ক সংজ্ঞাগুলি প্রসারিত করি (এটি সর্বদা ঠিক 1)।

এখন আপনি এই রূপান্তরটির জন্য বিপরীতমুখী ম্যাট্রিক্স তৈরি করতে পারেন । মূল সূত্রটি হ'ল:

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

... সঙ্গে সি হচ্ছে cofactors ম্যাট্রিক্স জন্য একটি

আপনার ক্ষেত্রে, নির্ধারক | | অফসেটের কোনও ব্যাপার না হয়ে সর্বদা 1024 হয়, সুতরাং বিপরীত ম্যাট্রিক্সটি হ'ল:

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


উদাহরণ গণনা

এখন, আপনার উদাহরণ ডেটা জন্য ...

সূত্রটিতে আপনার নম্বরটি অফসেটের জন্য রাখুন এবং আপনি পাবেন:

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

ম্যাট্রিক্সের সাথে গুণমান (105, 100, 1) (স্ক্রিন স্থানাঙ্ক) আপনাকে পেয়েছে:

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

যেহেতু তৃতীয় স্থানাঙ্ক সর্বদা 1, আমাদের এটি গণনা করতে হবে না। কাছাকাছি পুরো সংখ্যায় গোল করে আপনি প্রত্যাশা অনুযায়ী আপনার টাইল স্পেস স্থানাঙ্ক হিসাবে (1, 4) পাবেন।


সাধারণ ডাইমেট্রিক প্রজেকশন ম্যাট্রিক্স

আপনার যদি প্রতিটি টাইলের দৈর্ঘ্য 2 ডাব্লু (উদাহরণস্বরূপ 64, উদাহরণস্বরূপ ডাব্লু = 32) এবং 2 ঘন্টা উচ্চতা (উদাহরণস্বরূপ 32, তাই এইচ = 16), এবং উত্স বিন্দুর অফসেটের সাথে এর মতন দৃষ্টিভঙ্গি থাকে অনুভূমিক এবং উল্লম্ব অক্ষের জন্য যথাক্রমে স্ক্রিন স্পেস f x এবং f y হচ্ছে (উদাহরণে 192 এবং 0) ম্যাট্রিকগুলি নীচের মত দেখাচ্ছে like

স্ক্রিন স্পেসে টাইল স্পেস

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

টাইল স্পেসে স্ক্রিন স্পেস

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

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