PDA

View Full Version : اشكال در الگوريتم رسم خط.



shahmohammadi
دوشنبه 12 اردیبهشت 1390, 12:03 عصر
دوستان من براي اينكه الگوريتم رسم خط رو ياد بگيرم اين برنامه كوچيك رو كه فقط خط هاي محدودي رو رسم مي كنه اجرا كردم. ولي نمي دونم چرا به جاي اينكه 5 تا نقطه براي خط رسم كنه سه تا رسم مي كنه.در ضمن من اينو تو تربوسي نوشتم:
#include <graphics.h>
#include <conio.h>

void myline(int x,int y,int x2, int y2, int color) {
int w = x2 - x ;
int h = y2 - y ;
double m = h/(double)w ;
double j = y ;
for (int i=x;i<=x2;i++) {
getch();
putpixel(i,(int)j,color) ;
color++;
j += m ;
}
}

void main()
{
clrscr();
int d=DETECT,m;
initgraph(&d,&m,"");
myline(0,0,4,1,4);
getch();

}

ژوپیتر
دوشنبه 12 اردیبهشت 1390, 12:32 عصر
دوستان من براي اينكه الگوريتم رسم خط رو ياد بگيرم اين برنامه كوچيك رو كه فقط خط هاي محدودي رو رسم مي كنه اجرا كردم. ولي نمي دونم چرا به جاي اينكه 5 تا نقطه براي خط رسم كنه سه تا رسم مي كنه.در ضمن من اينو تو تربوسي نوشتم:
#include <graphics.h>
#include <conio.h>

void myline(int x,int y,int x2, int y2, int color) {
int w = x2 - x ;
int h = y2 - y ;
double m = h/(double)w ;
double j = y ;
for (int i=x;i<=x2;i++) {
getch();
putpixel(i,(int)j,color) ;
color++;
j += m ;
}
}

void main()
{
clrscr();
int d=DETECT,m;
initgraph(&d,&m,"");
myline(0,0,4,1,4);
getch();

}

در قسمت double m = h/(double)w چون h ایتیجر هست، حاصل باز اینتیجر میشه و در نتیجه m روند میشه، بهتره از یک الگوریتم رسم خط که قبلا تست شده استفاده کنی.

http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

موفق باشید.

shahmohammadi
دوشنبه 12 اردیبهشت 1390, 21:33 عصر
ولي خوب اشكال كار فكر نكنم اونجا باشه. چون int به double تبديل مي شه.
تو هر گام حلقه وقتي كليدي رو مي خواست من كليد حركت به سمت چپ (<-) رو فشار مي دادم. حلقه ناقص مي رفت اما الان كه دكمه هاي ديگري رو ميزنم هر پنج تا رو رسم ميكنه. اما اونطوري نيست كه فكرشو مي كردم چون بايد دو تا نقطه در سطر اول چاپ مي كرد بعد سه تا در سطر دوم.
از راهنمايي تون ممنون.