-
كشيدن خط در سي پلاس پلاس
سلام
من كدي براي كشيدن خط نوشته ام ولي چندجا استثناهايي ايجاد ميشه كه مي خواستم كمكم كنيد
كد من:
[HTML]
void myline(float x1, float y1 , float x2 , float y2)
{
float y;
if ((x2-x1)==0 ||(x2<x1) ||(y2<y1)) line( x1 , y1 , x2 , y2);
else
{
float m = (y2-y1)/(x2-x1);
float b = y2-m*x2;
for (float x = x1 ; x<=x2 ; x+=0.01)
{
y = m * x +b;
putpixel(x,y,15);
}
}
}
[/HTML]
اگر x2 كوچكتر از x1 باشه كه تعريف نشده ميشه چون توي مخرجه (خطوط عمودي)پس من با خود تابع line محيط اين مشكل را بر طرف كردم ولي مي خوام بدونم راهي هست كه اصلا از توابع پيش فرض استفاده نكنم؟
مشكل بعدي كه ايجاد ميشه موقعيه كه حتي y2 هم از y1 كوچكتر باشه(صورت منفي ميشه) در اين صورت با وجود تعريف كردن float براي m با مشكل مواجه ميشه و من باز هم اين استثنا را با تابع line خود سي پلاس رفع كرده ام
يه مرود ديگه كه ايجاد مشكل مي كنه اينه: اگه x2 از x1 بزرگتر باشه و y1 هم از y2 بزرگتر باشه حتي با جابه جا كردن جاي نقاط در وروديهاي تابع براي اينكه مخرج 0 نشه باز هم صورت منفي ميشه و باز هم دردسر
حالا من و موندمو اين سه مشكل لاينحل
چي كار بايد بكنم
مرسي راهنمايي كنيد
-
دوباره سلام.
میتونین از الگوریتم Bresenham استفاده کنین.
الگوریتم رو براتون میذارم. به راحتی میتونین کدش رو بنویسین :
کد:
function line(x0, x1, y0, y1)
boolean steep := abs(y1 - y0) > abs(x1 - x0)
if steep then
swap(x0, y0)
swap(x1, y1)
if x0 > x1 then
swap(x0, x1)
swap(y0, y1)
int deltax := x1 - x0
int deltay := abs(y1 - y0)
int error := 0
int ystep
int y := y0
if y0 < y1 then ystep := 1 else ystep := -1
for x from x0 to x1
if steep then plot(y,x) else plot(x,y)
error := error + deltay
if 2×error ≥ deltax then
y := y + ystep
error := error - deltax
اگه مشکلی پیش اومد اطلاع بدین.