PDA

View Full Version : سوال: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#‎



masoud908
یک شنبه 10 دی 1391, 13:31 عصر
سلام
من با C#‎‎ اشنایی ندارم و میخوام این الگوریتم و تابع بازگشتی رو به صورت برنامه در C#‎‎ اجرا کنم ولی نمیدونم چطوری هست ممنون میشم راهنمایی کنید
این الگوریتم 4 همبند برای پر کردن و رنگ کردن پیکسل هاس

bf4(int x,int y,int fc ,int bc)

{
int ic;
Getpixel(x,y,ic);
if(ic!=bc)&&(ic!=fc))
{
Setpixel(x,y,fc)
bf4(x+1,y,fc,bc)
bf4(x-1,y,fc,bc)
bf4(x,y+1,fc,bc)
bf4(x,y-1,fc,bc)
}

}










fc =fill color
bc=border color
ic=interior color
این باید در محیط Form application بنویسیم یا consol application?

mofid002006@gmail.com
یک شنبه 10 دی 1391, 13:57 عصر
این کدی که نوشتی تفاوت خاصی با کدهای سی شارپ نداره به غیر اینکه موقع تعریف تابع bf4 باید اولش public void رو اضافه کنی و آخر کدهایی که توی if نوشتی هم حتما سیمیکلون وجود داشته باشه
جدا از این حرفا 2 تا تابع هم داری که فقط اسمشون اومده Getpixel و Setpixel

در مورد فرم بودن یا کنسول بودن هم بستگی به خودت داره اگه از کنسول استفاده کنی زمان اجرا یه پنجره شبیه cmd برات باز میشه اما اگه از فرم استفاده کنی مثل پنجره های خود ویندوز خواهد بود، مشخصه که فرم خیلی قشنگ تر و دلچسب تره

masoud908
یک شنبه 10 دی 1391, 15:12 عصر
الان این یه برنامه دیگه هست که تابع داره :

private void pictureBox1_Click(object sender, EventArgs e)
{
int xc = 100, yc = 100, r = 30;
int x = 0, y = r, p = 1 - r;
Bitmap bmp1 = new Bitmap(150, 150);
bmp1.SetPixel(x, y, Color.Red);
while(x<y)
{
x++;
if(p<0)
p=p+2*x+1;
else
{
--y;
p=p+2*(x-y)+1;
plot8pixel(xc, yc, x, Color.Blue);
}
}
}
public void plot8pixel(int xc,int yc,int x,int y,int color)
{
Bitmap bmp1 = new Bitmap(150, 150);
bmp1.SetPixel(xc + x, yc + y, Color.Red);
bmp1.SetPixel(xc + x, yc - y, Color.Red);
bmp1.SetPixel(xc - x, yc + y, Color.Red);
bmp1.SetPixel(xc - x, yc - y, Color.Red);
bmp1.SetPixel(xc + y, yc + x, Color.Red);
bmp1.SetPixel(xc + y, yc - x, Color.Red);
bmp1.SetPixel(xc - y, yc + x, Color.Red);
bmp1.SetPixel(xc - y, yc - x, Color.Red);
pictureBox1.Image = bmp1;
}

}

}
مشکلش چیه ؟
به جای color تو فراخوانی تابع چی باید گذاشت تو C# ?

masoud908
یک شنبه 10 دی 1391, 16:33 عصر
private void button1_Click(object sender, EventArgs e)
{
int xc = 100, yc = 100, r = 30;
int x = 0, y = r, p = 1 - r;
Bitmap bmp1 = new Bitmap(150, 150);
bmp1.SetPixel(x, y, Color.Red);
while (x < y)
{
x++;
if (p < 0)
p = p + 2 * x + 1;
else
{
--y;
p = p + 2 * (x - y) + 1;
}
bmp1.SetPixel(xc + x, yc + y, Color.Red);
bmp1.SetPixel(xc + x, yc - y, Color.Red);
bmp1.SetPixel(xc - x, yc + y, Color.Red);
bmp1.SetPixel(xc - x, yc - y, Color.Red);
bmp1.SetPixel(xc + y, yc + x, Color.Red);
bmp1.SetPixel(xc + y, yc - x, Color.Red);
bmp1.SetPixel(xc - y, yc + x, Color.Red);
bmp1.SetPixel(xc - y, yc - x, Color.Red);
pictureBox1.Image = bmp1;
}

}

الان این همون برنامه بالا بدون تابع هست ولی تابع تبدیل میکنم نمیشه

mofid002006@gmail.com
یک شنبه 10 دی 1391, 17:22 عصر
اگه قراره فقط از یه رنگ استفاده بشه قسمت توی تعریف تابع و فراخوانیش نیازی به color نیست:
public void plot8pixel(int xc,int yc,int x,int y)

masoud908
یک شنبه 10 دی 1391, 17:28 عصر
اگه قراره فقط از یه رنگ استفاده بشه قسمت توی تعریف تابع و فراخوانیش نیازی به color نیست:
public void plot8pixel(int xc,int yc,int x,int y)
همین کارم میکنم برنامه ارور نداره ولی خروجی برنامه اشکال داره و فقط 4 پیکسل رسم میکنه در حالی که بدون تابع دایره رسم میشه
اگر امکانش هست ممنون میشم خودتون برنامه رو اجرا کنید ببینید مشکلش چیه

mofid002006@gmail.com
یک شنبه 10 دی 1391, 19:40 عصر
کد زیر رو نگاه کن، تغییرات رو ببین خروجی رو هم ببین :


Bitmap bmp1 = new Bitmap(150, 150);
public void plot8pixel(int xc, int yc, int x, int y)
{
bmp1.SetPixel(xc + x, yc + y, Color.Red);
bmp1.SetPixel(xc + x, yc - y, Color.Red);
bmp1.SetPixel(xc - x, yc + y, Color.Red);
bmp1.SetPixel(xc - x, yc - y, Color.Red);
bmp1.SetPixel(xc + y, yc + x, Color.Red);
bmp1.SetPixel(xc + y, yc - x, Color.Red);
bmp1.SetPixel(xc - y, yc + x, Color.Red);
bmp1.SetPixel(xc - y, yc - x, Color.Red);
pictureBox1.Image = bmp1;
}

private void button1_Click(object sender, EventArgs e)
{
int xc = 100, yc = 100, r = 30;
int x = 0, y = r, p = 1 - r;
bmp1.SetPixel(x, y, Color.Red);
while (x < y)
{
x++;
if (p < 0)
p = p + 2 * x + 1;
else
{
--y;
p = p + 2 * (x - y) + 1;
}
plot8pixel(xc, yc, x, y);
}
}

masoud908
دوشنبه 11 دی 1391, 09:58 صبح
در مورد الگوریتم اول که گفتید مبهمه من دو تا دیگه پیدا کردم از سایت های خارجی که اونا هم c رو پیدا کرده بودن و دنبال C#‎‎‎‎ میگشتن :
http://social.msdn.microsoft.com/Forums/pl/csharplanguage/thread/aa0a5938-3301-496d-8377-83a8f7dff7f6



1.void boundaryfill4 ( int x,int y, int fillcolor, int bordercolor)

2.{

3.int interiorcolor;

4.getpixel ( x, y ,interiorcolor);



5.if (( interiorcolor!= bordercolor)&&( interior!= fillcolor))

6.

7. { setcolor(fillcolor);

8. setpixel(x,y);

9.

10. boundaryfill4(x+1,y,fillcolor,brodercolor);



11. boundaryfill4(x-1,y,fillcolor,brodercolor);

12.

13. boundaryfill4(x,y+1,fillcolor,brodercolor);

14.

15. boundaryfill4(x,y-1,fillcolor,brodercolor);

16. }

17.}