PDA

View Full Version : سوال: تبديل آرايه به ماتريس سياه و سفيد در هنگام نمايش



f_g1348
سه شنبه 18 مهر 1391, 15:24 عصر
سلام دوستان
من يه آرايه n*n دارم كه مقاديرش يا صفر است يا يك . حالا مي خواهم اين را بصورت گرافيكي نمايش دهم به اين صورت كه يك مربع n*n در فرم نمايش داده شود و سپس هرجا يك بود رنگ سياه و هرجا صفر بود رنگ سفيد نمايش دهد
در اصل يك صفحه سياه و سفيد به من نمايش دهد

مسعود اقدسی فام
سه شنبه 18 مهر 1391, 17:30 عصر
ماتریسی از lable با طول و عرض برابر و کنار هم تعریف کنید. بعد رنگ BackColor هر لیبل رو متناظر با یه عضو سیاه یا سفید کنید. جای لیبل‌ها هم خیلی ساده از محاسبات ریاضی به دست می‌یاد.

f_g1348
سه شنبه 18 مهر 1391, 18:05 عصر
دوست عزيز دوتا سوال
1- چطور اين كار را انجام دهم ؟
2 - عدد n تعريف شده در بالا ممكن است به 10000 هم برسد آن موقع مشكلي پيش نمي آيد ؟

مسعود اقدسی فام
سه شنبه 18 مهر 1391, 18:30 عصر
دوست عزيز دوتا سوال
1- چطور اين كار را انجام دهم ؟
2 - عدد n تعريف شده در بالا ممكن است به 10000 هم برسد آن موقع مشكلي پيش نمي آيد ؟

۱- منظورتون اینه که کد رو بنویسم؟ یا با تعریف دستی lable مشکلی دارید که چطور همچین چیزی ممکنه؟

۲- مشکل این می‌شه که از فرم می‌زنه بیرون و دیده نمی‌شه. به هر حال حداکثر ابعاد فرم و حداقل اندازه ممکن برای هر خانه رو در نظر بگیرید برای کار.
به هر حال هر برنامه‌ای یه محدودیتی داره. چون به هر حال امکانات کامپیوتر محدوده.

f_g1348
چهارشنبه 19 مهر 1391, 08:02 صبح
دوست عزيز به عكس ضميمه توجه بفرما
من چنين كاري مي خواهم بكنم
داستان از اين قرار است كه برنامه يك متن نسبتاً طولاني از ورودي مي گيرد و سپس آنرا بصورت كلمه به كلمه در مي آورد و يك ماتريس كه تعداد سطر و ستونش برابر تعداد كلمات است تشكيل مي دهد و سپس هرجا عنصر سطر و ستون با هم برابر بود يك و درغير اينصورت صفر مي گذارد . در مرحله بعد آن ماتريس را بصورت گرافيكي ( مانند شكل بالا ) در مي آورد
اين كار را براي تفكيك موضوعي متن ( قطعه بندي متن ) انجام مي دهيم
حال با توجه به توصيف ذكر شده من را راهنمايي بفرماييد
بعيد مي دونم با دادن lable بشود اين كار را انجام داد

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 09:13 صبح
عکس ضمیمه وجود نداره.

f_g1348
چهارشنبه 19 مهر 1391, 09:48 صبح
دوست عزيز عكس ضميمه در سوال اول تاپيك

مسعود اقدسی فام
چهارشنبه 19 مهر 1391, 10:00 صبح
دوست عزيز به عكس ضميمه توجه بفرما
من چنين كاري مي خواهم بكنم
داستان از اين قرار است كه برنامه يك متن نسبتاً طولاني از ورودي مي گيرد و سپس آنرا بصورت كلمه به كلمه در مي آورد و يك ماتريس كه تعداد سطر و ستونش برابر تعداد كلمات است تشكيل مي دهد و سپس هرجا عنصر سطر و ستون با هم برابر بود يك و درغير اينصورت صفر مي گذارد . در مرحله بعد آن ماتريس را بصورت گرافيكي ( مانند شكل بالا ) در مي آورد
اين كار را براي تفكيك موضوعي متن ( قطعه بندي متن ) انجام مي دهيم
حال با توجه به توصيف ذكر شده من را راهنمايي بفرماييد
بعيد مي دونم با دادن lable بشود اين كار را انجام داد

از اول اون عکس اونجا بود؟!

اگه lable نشه، شاید کار گرافیکی بشه. یعنی دیگه کمتر از اون امکان نداره فضا برای یه عضو ماتریس. به این معنی که هر پیکسل فرم رو به صورت گرافیکی متناسب با آرایه سفید یا سیاه کنید.

اما اونطوری که من اینجا دارم می‌بینم شما نمودار سه هزار در سه هزار رو با کیفیت پایین گذاشتید. اگه هدف نمایش کامل این ابعاد باشه که هر مونیتوری نمی‌تونه کلا یه جا نشونش بده. مگه اسکرول بذارید براش. اما اگه مثل این تصویر کوچک کردن و نمایش تقریبی هستش می‌شه یه محاسباتی کرد. مثلا هر چهار خانه همسایه (دو تا سطر دو ستونی) رو با یه پیکسل نشون داد.اینطوری ابعاد نصف می‌شه. و غیره

f_g1348
پنج شنبه 20 مهر 1391, 10:42 صبح
خوب دوست عزیز چطور این کار را انجام دهم ؟
لطفاً من را راهنمایی کن

morteza271
پنج شنبه 20 مهر 1391, 11:23 صبح
دوست عزیز ببینید این کدی که گذاشتم بدردتون میخوره یا نه؟
البته اینم بگم که خودتون باید اندازه فرم و پنلتون رو کنترل کنید بر اساس اندازه آرایه یا همون ماتریس.
چرا که اگه جا نشه با کد زیر میره زیر و دیده نمیشه!
private void button4_Click(object sender, EventArgs e)
{
int[,] arrList = new int[100, 100];
Random rand = new Random();
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
arrList[i, j] = rand.Next(0, 1000) % 2;
}
}
System.Drawing.Pen myPen = new System.Drawing.Pen(System.Drawing.Color.Black, 2);
System.Drawing.Graphics panelGraphics = panel2.CreateGraphics();

for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 100; j++)
{
if (arrList[i, j] == 0)
myPen = new System.Drawing.Pen(System.Drawing.Color.Black, 1);
else
myPen = new System.Drawing.Pen(System.Drawing.Color.White, 1);

panelGraphics.DrawRectangle(myPen, i, j, 1, 1);
myPen.Dispose();
}
}
panelGraphics.Dispose();
}

البته دقت کنید که در قسمت اول من آرایه رو مقداردهی کردم و شما میتونید از آرایه خودتون استفاده کنید.
موفق باشید

f_g1348
جمعه 21 مهر 1391, 14:20 عصر
با تشکر از شما دوست عزیز
حالا اگه بخوام اعداد روی سطر و ستون نمایش داده بشوند چه باید بکنم ؟