PDA

View Full Version : راهنمایی برای برنامه رسم دایره



mahtab_m
شنبه 08 اسفند 1388, 18:14 عصر
سلام. من برنامه زیر رو برای رسم رایره نوشتم. اما برنامه جواب نمیده.
لطفا راهنمایی کنید بگید مشکل از کجاست


bool ready = false;

int xCenter, yCenter, radius;
int xr, yr;

Bitmap bt = new Bitmap(1000, 1000);

private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
ready = true;
xCenter = e.X;
yCenter = e.Y;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (ready)
{
xr = e.X;
yr = e.Y;
int a=xr - xCenter;
int b=yr - yCenter;

radius = Convert.ToInt32(Math.Sqrt(Math.Pow(a, 2) - Math.Pow(b, 2)));

pictureBox1.Refresh();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
ready = false;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{

int x=0;
int y=radius;
int p=1-radius;

circleplotpoints(xCenter ,yCenter ,x,y);
while(x<y)
{
x++;
if(p<0)
p+=2*x+1;
else
{
y--;
p+=2*(x-y)+1;
}
circleplotpoints(xCenter ,yCenter ,x,y);
}
}

void circleplotpoints(int xCenter, int yCenter, int x, int y)
{
bt.SetPixel(xCenter + x, yCenter + y, Color.Black);
bt.SetPixel(xCenter - x, yCenter + y, Color.Black);
bt.SetPixel(xCenter + x, yCenter - y, Color.Black);
bt.SetPixel(xCenter - x, yCenter - y, Color.Black);
bt.SetPixel(xCenter - y, yCenter + x, Color.Black);
bt.SetPixel(xCenter - y, yCenter + x, Color.Black);
bt.SetPixel(xCenter - y, yCenter + x, Color.Black);
bt.SetPixel(xCenter - y, yCenter + x, Color.Black);
}

mehdi.mousavi
یک شنبه 09 اسفند 1388, 16:14 عصر
سلام.
PictureBox خودش یه کنترله که وظیفه خاص خودش رو داره. شما بصرف کشیدن یک (یا چند) نقطه و دایره که نباید از یه PictureBox به این شکل استفاده کنید. فرم شما، در واقع Device Context شماست. هر چی دوست دارید میتونید روی فرم بکشید و نیازی به قرار دادن یک PictureBox روی صفحه و اینطور کنترلهای عجیب و غریب نیست!

در هر حال، شما دارید توی Bitmap ای که new کرده اید، نقاط مورد نظر رو می کشید. یه جایی باید به PictureBox بگید که Source اش، این bitmap هست... این کارو کنید، PictureBox شکل مورد نظر رو بهتون نشون میده! (البته باید تغییراتی بنیادی در ساختار کد بدید، مثلا دیگه به OnPaint نیازی نیست و ...)

موفق باشید.