تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
سلام
من با 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?
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
این کدی که نوشتی تفاوت خاصی با کدهای سی شارپ نداره به غیر اینکه موقع تعریف تابع bf4 باید اولش public void رو اضافه کنی و آخر کدهایی که توی if نوشتی هم حتما سیمیکلون وجود داشته باشه
جدا از این حرفا 2 تا تابع هم داری که فقط اسمشون اومده Getpixel و Setpixel
در مورد فرم بودن یا کنسول بودن هم بستگی به خودت داره اگه از کنسول استفاده کنی زمان اجرا یه پنجره شبیه cmd برات باز میشه اما اگه از فرم استفاده کنی مثل پنجره های خود ویندوز خواهد بود، مشخصه که فرم خیلی قشنگ تر و دلچسب تره
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
الان این یه برنامه دیگه هست که تابع داره :
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# ?
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
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;
}
}
الان این همون برنامه بالا بدون تابع هست ولی تابع تبدیل میکنم نمیشه
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
اگه قراره فقط از یه رنگ استفاده بشه قسمت توی تعریف تابع و فراخوانیش نیازی به color نیست:
public void plot8pixel(int xc,int yc,int x,int y)
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
نقل قول:
نوشته شده توسط
mofid002006@gmail.com
اگه قراره فقط از یه رنگ استفاده بشه قسمت توی تعریف تابع و فراخوانیش نیازی به color نیست:
public void plot8pixel(int xc,int yc,int x,int y)
همین کارم میکنم برنامه ارور نداره ولی خروجی برنامه اشکال داره و فقط 4 پیکسل رسم میکنه در حالی که بدون تابع دایره رسم میشه
اگر امکانش هست ممنون میشم خودتون برنامه رو اجرا کنید ببینید مشکلش چیه
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
کد زیر رو نگاه کن، تغییرات رو ببین خروجی رو هم ببین :
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);
}
}
نقل قول: تبدیل این الگوریتم بازگشتی به برنامه ای قابل اجرا در C#
در مورد الگوریتم اول که گفتید مبهمه من دو تا دیگه پیدا کردم از سایت های خارجی که اونا هم c رو پیدا کرده بودن و دنبال C# میگشتن :
http://social.msdn.microsoft.com/For...7-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.}