PDA

View Full Version : سوال: کشیدن خط و دایره با Setpixel



sAsAn.K
یک شنبه 22 فروردین 1389, 00:55 صبح
سلام دوستان .
میخوام به Setpixel خط و دایره بتونم بکشم ، این برنامه رو نوشتم برای خط ، درست کار نمیده :

Double m, t;
int x1, x2, y1, y2, y;
x1 = Convert.ToInt32(textBox1.Text);
y1 = Convert.ToInt32(textBox2.Text);
x2 = Convert.ToInt32(textBox3.Text);
y2 = Convert.ToInt32(textBox4.Text);
Bitmap bmp = new Bitmap(this.Width, this.Height);
pictureBox1.Image = bmp;
if (x1 > x2)
{
y = x1;
x1 = x2;
x2 = y;
y = y1;
y1 = y2;
y2 = y;
}
m = Convert.ToDouble(y2 - y1) / Convert.ToDouble(x2 - x1);

if (m > 1)
m = 1 / m;
t = x1;
while (t < x2)
{
t += 0.1;
y = Convert.ToInt32((m) * (t - x1) + y1);
bmp.SetPixel(Convert.ToInt32(t), y, Color.Black);
}


میخوام x1،y1 و x2،y2 رو بگیره و خط رسم کنه .
برای رسم خط بدست آوردن شیب لازمه دیگه .
برای دایره هم گفتن اگه بزرگ باشه شاید نقطه های فاصله دار بکشه که اونا رو هم باید با همون دستور های خط بینشون خط کشید .

ممنون میشم کمک کنید .

Netsky
یک شنبه 22 فروردین 1389, 08:05 صبح
سلام دوست عزیز .
این برنامه رو ببین. توی این برنامه کلیه توابع گرافیکی داخلش توضیح داده شدن . چیزایی هم که شما میخای داخلش هست ( کشیدن خط و دایره ) .
لینک (http://barnamenevis.org/forum/showpost.php?p=883888&postcount=404)
موفق باشید ...........

exlord
یک شنبه 22 فروردین 1389, 11:12 صبح
فرمول دایره : (x^2)+(y^2)=R^2

int w, h;
w = pictureBox1.Width;
h = pictureBox1.Height;
Point center = new Point(w / 2, h / 2);

Bitmap bmp = new Bitmap(this.Width, this.Height);
pictureBox1.Image = bmp;
int x, y, r;
r = 50;
for (x = -r; x <= r; x++)
{
y = Convert.ToInt32(Math.Sqrt(Math.Pow(r , 2) -Math.Pow(x , 2)));
bmp.SetPixel(center.X + x, center.Y + y, Color.Black);
bmp.SetPixel(center.X + x,center.Y - y, Color.Black);
}


int x, y, r,nogte;
double Tetha;//zaviye bar hasbe Radian
r = 100;
nogte = 180;

for (int n = 1; n <= nogte;n++ )
{
Tetha = n * (2 * Math.PI) / nogte;
x = Convert.ToInt16(r * Math.Cos(Tetha));
y = Convert.ToInt16(r * Math.Sin(Tetha));
bmp.SetPixel(center.X + x, center.Y + y, Color.Black);
bmp.SetPixel(center.X + x, center.Y - y, Color.Black);
}

اینم خط ...

int x1, x2, y1, y2, X, Y;
x1 = 2;
x2 = 25;
y1 = -3;
y2 = 100;

for (X = x1; X <= x2; X++)
{
Y = (((X - x1) * (y2 - y1)) / (x2 - x1)) + y1;
bmp.SetPixel(center.X + X,center.Y + Y, Color.Black);
}

sAsAn.K
یک شنبه 22 فروردین 1389, 15:19 عصر
اون مثال اولیه که با دستور DrawLine ه ، دومیا هم که این دوستمون دادن مشکل داره .
دوستان کسی نیست کمک کنه ؟

اَرژنگ
یک شنبه 22 فروردین 1389, 16:03 عصر
اون مثال اولیه که با دستور DrawLine ه ، دومیا هم که این دوستمون دادن مشکل داره .
دوستان کسی نیست کمک کنه ؟
exlord کد به این کاملی فرستاد، لطفاً بگید اشکالش چیه.
شما برنامه‌ای را که میگید این کد دومی درش کار نمیکنه را بفرستید درستش کنیم.

Shahram_Shobeiri
یک شنبه 22 فروردین 1389, 16:40 عصر
رسم خط با روش DDA

اَرژنگ
یک شنبه 22 فروردین 1389, 16:54 عصر
رسم خط با روش DDA
DDA مخفف چیه؟

sAsAn.K
یک شنبه 22 فروردین 1389, 17:18 عصر
اینطوری بهتره ، شما با 2005 یه برنامه بسازید که 4 تا TextBox داشته باشه که مختصات ها رو بگیره (x1,y1,x2,y2) و یه button که وقتی میزنی خط رو توی یه PictureBox بکشه .
ممنون .
همینطور دایره اگه ممکنه .