1D ডেটা স্ট্রাকচারকে 2 ডি গ্রিড হিসাবে চিকিত্সা করা হচ্ছে


48

আমি একটি নেটিভ ক্লাসের সাথে কাজ করছি যা 2D চিত্রকে 1D অ্যারে হিসাবে উপস্থাপন করে। উদাহরণস্বরূপ, আপনি যদি একটি পিক্সেল পরিবর্তন করতে চান তবে আপনাকে এখনই কীভাবে x,yস্থানাঙ্কগুলি থেকে সূচকটি নেওয়া যায় তা আপনার প্রয়োজন ।

সুতরাং, আসুন আমরা বলি যে আমাদের কাছে 1D অ্যারে রয়েছে array1d:

array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ]

আমাদের প্রোগ্রামের প্রসঙ্গে, array1dএকটি 2 ডি গ্রিড উপস্থাপন করে:

a b c d e
f g h i j
k l m n o
p q r s t
u v w x y

এবং আমরা এর উপর অপারেশন সম্পাদন করতে চাই array1d:

  • x,yস্থানাঙ্কে মান পান (এই উদাহরণে, 1,2দেবে l)
  • ব্যবহার করে যে কোনও উপ-গ্রিড পান x,y,width,height( 1,2,2,2দেবে [l, m, q, r])
  • যেকোন x,yস্থানাঙ্কে মান নির্ধারণ করুন (ইত্যাদি)

আমরা এইগুলি কীভাবে করব?


মতলব এবং সম্ভবত এইভাবে গণিতের প্রকারগুলি (যা সিএসে ছড়িয়ে পড়ে), একটি ম্যাট্রিক্সকে অন্য একটিতে রূপান্তর করতে (এটি 1x12 কে 2x6 বা 2x6 কে 3x4 এ রূপান্তর করতে) " পুনর্নির্মাণ

@ মিশেলটি: ওপি গ্রিডটি পুনরায় আকার দিচ্ছে না। অন্য কোনও কিছুর সাথে 5x5 পুনরায় আকার দেওয়ার কোনও উল্লেখ নেই (যা কোনওভাবেই বোঝা যায় না)। :)
IAbstract

যে প্রশ্ন @IAbstract ছিল মধ্যে সংশোধন 1 যদিও।

উত্তর:


86

2D / 1D - ম্যাপিংটি বেশ সহজ। প্রদত্ত x এবং y এবং 2D অ্যারের আকারগুলি width(এক্স-দিকনির্দেশের জন্য) এবং height(y- দিকের জন্য), আপনি i1D স্পেসে সূচকটি গণনা করতে পারেন (শূন্য-ভিত্তিক) দ্বারা

i = x + width*y;

এবং বিপরীত অপারেশন হয়

x = i % width;    // % is the "modulo operator", the remainder of i / width;
y = i / width;    // where "/" is an integer division

আপনি এটি 3 বা ততোধিক মাত্রায় সহজেই প্রসারিত করতে পারেন। উদাহরণস্বরূপ, মাত্রা "প্রস্থ", "উচ্চতা" এবং "গভীরতা" সহ একটি 3D ম্যাট্রিক্সের জন্য:

i = x + width*y + width*height*z;

এবং বিপরীত:

x = i % width;
y = (i / width)%height;
z = i / (width*height);

@ ওয়াশবার্ন এটি করার theতিহ্যগত উপায় এটি এমনকি স্থির 2D অ্যারেগুলির জন্য সংকলক হিসাবে তৈরি করা হয়েছে
রাচেট ফ্রিক

@ এমটোস্ট: আমি এটি মনে করি না, এটির প্রাথমিক প্রাথমিক গণিত ma
ডক ব্রাউন

এই উদাহরণটি 3D এর পক্ষে ভুল। গণনায় শব্দের গভীরতা উচ্চতা হওয়া উচিত।
jiggunjer

@ জিগগুনজার: সংশোধন করার জন্য ধন্যবাদ, সেই অনুসারে আমার উত্তর বদলেছে।
ডক ব্রাউন

1
@ মাকাকাস: এটি পাঠকের কাছে ছেড়ে দেওয়া অনুশীলন ;-)। ইঙ্গিত: আপনাকে সঠিক জায়গায় একটি অফসেট হিসাবে নীচের দিকে আবদ্ধ / বিয়োগ করতে হবে। তবে আপনি এটি চেষ্টা করার আগে নিজের কাছে পরিষ্কার করুন যে আপনি দুটি অ্যারেটি বোঝাতে চাইছেন, 1D বা 2D অ্যারে।
ডক ব্রাউন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.