PDA

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



hasan1896
سه شنبه 14 مهر 1388, 11:00 صبح
با سلام خدمت دوستان برنامه نویس
من برای انجام یه تمرین درس گرافیک کامپیوتری میخواستم ازتون کمک بگیرم لطفا تا قبل از یکشنبه 19/7/88 اگه تونستید جوابمو بدید خیلی مهمه البته اینو هم بگم که من 2 ماهه که دارم C#‎ 2005 رو میخونم ولی تسلط کافی برای انجام این برنامه رو ندارم پس لطفا دقیق به من لطف کنین و جواب بدین
و اما سوال:
1- برنامه ای بنویسید که مختصات (x,y) نقاط A وB رو بگیره و از نقطه A تا نقطه B یک خط رسم کنه به این ترتیب که با روشن کردن پیکسل ها از نقطه a به سمت نقطه b بره ولی از اونجا که رسم خط در C#‎ با استفاده از تابع DrawLine صورت میگیره ( که از معادله خط استفاده میکنه تا شیب خط رو محاسبه کنه ) از ما خواسته شده که بدون در نظر گرفتن معادله خط و بدون استفاده از تابع DrawLine از نقطه a به سمت نقطه b پیکسل ها رو روشن کنیم تا جایی که Xa=Xb بشه و خط تا اینجا تموم میشه.
2- حالا با استفاده از تابع DrawLine با استفاده از همون نقاط a و b خط رو رسم کنید تا تفاوت بین خطوط مشخص بشه.:لبخند::لبخند::چشمک:

sabah.hab
پنج شنبه 25 خرداد 1391, 10:54 صبح
private void ddaline(int X1, int Y1, int X2, int Y2)
{
int dx = X2 - X1;
int dy = Y2 - Y1;
decimal xa=0, ya=0;
if (Math.Abs(dx) > Math.Abs(dy)) step = Math.Abs(dx);
else step = Math.Abs(dy);
x_inc = decimal.ToInt32(dx) / step;
y_inc = decimal.ToInt32(dy) / step;
for (i = 1; i < step; i++)
{
xa = xa + x_inc; ya = ya + y_inc;
bmp.SetPixel( decimal.ToInt32(Math.Round(xa)), decimal.ToInt32(Math.Round(ya)), Color.Blue);
}
}

sabah.hab
پنج شنبه 25 خرداد 1391, 10:55 صبح
اينم روش برزنهام و قبلي هم دي دي اي بود
private void bers(int X1, int Y1, int X2, int Y2)
{
int dx = X2 - X1;
int dy = Y2 - Y1;
if (dx < 0) dx = dx * (-1);
if (dy < 0) dy = dy * (-1);
p = 2 * dy - dx;
Tdy = 2 * dy;
Tdydx = 2 * (dy - dx);
Tdx = 2 * dx;
Tdxdy = 2 * (dx - dy);
if (X1 > X2)
{
x = X2;
y = Y2;
step = X1;
}
else
{
x = X1;
y = Y1;
step = X2;
}
bmp.SetPixel(x, y, Color.Blue);
while (x < step)
{
x++;
if (p < 0) p += Tdy;
else { y++; p += Tdydx; }
bmp.SetPixel(x, y, Color.Blue);
}
if (Y1 > Y2)
{
x = X2;
y = Y2;
step = Y1;
}
else
{
x = X1;
y = Y1;
step = Y2;
}
bmp.SetPixel(x, y, Color.Blue);
while (y < step)
{
y++;
if (p < 0) p += Tdx;
else { x++; p += Tdxdy; }
bmp.SetPixel(x, y, Color.Blue);
}

میرزا کاتب
جمعه 11 اسفند 1391, 14:12 عصر
راهی هست که توی کنسول هم این کارو بشه انجام داد؟