Thuật toán DDA_Line dạng tổng quát

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

Thuật toán DDA_Line dạng tổng quát

Bài gửi by nth on 09/11/09, 08:18 pm


void hoanvi(int &a, int &b)
{ a = a ^ b;
b = a ^ b;
a = a ^ b;
}

// Hàm Line DDA ở dạng tổng quát.
void CGraphics::DrawLine_DDA_Full_2(int x1, int y1, int x2, int y2)
{ float dx, dy, x, y;
float p;
dx = x2 - x1;
dy = y2 - y1;
if(abs(dx) >= abs(dy))
{ if(x1 > x2)
{ hoanvi(x1, x2);
hoanvi(y1, y2);
}
p = (float)(y2 - y1)/(x2 - x1);
y = y1;
for(x = x1; x < x2; x++)
{ SetPixel(x, Round(y));
y += p;
}
}
else
{ if(y1 > y2)
{ hoanvi(x1, x2);
hoanvi(y1, y2);
}
x = x1;
p = (float)(x2 - x1)/(y2 - y1);
for(y = y1; y < y2; y++)
{ SetPixel(Round(x), y);
x += p;
}
}
}

Các bạn có thể viết hàm hoán vị như những cách đã học ở lập trình nâng cao kì trước. Riêng đây mình giới thiệu thêm cách dùng toán tử XOR, chương trình sẽ chạy nhanh hơn, và rất chính xác đó.


Được sửa bởi nth ngày 10/12/09, 04:17 am; sửa lần 1.

===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

Re: Thuật toán DDA_Line dạng tổng quát

Bài gửi by nth on 09/11/09, 08:20 pm

Cách thứ 2: DDA của Âu.. H xin post lên đây luôn nhen
void CGraphics::DrawLine_DDA_Full(int x1, int y1, int x2, int y2)
{
CGraphics Point;
float x,y,m;
int dx=x2-x1, dy=y2-y1;
if(dx==0 && dy==0)
SetPixel(0,0,m_color);
if(abs(dx) > abs(dy)) // Truong hop 1-2
{
m=float(dy)/dx;
int k=dx > 0 ? 1:-1;
x=x1; y=y1;
for(int i=0;i
{
PutPixel(Round(x),Round(y),m_color);
x+=k;
y+=m*k;
}
}
else
{
m=float(dx)/dy;
int k = dy > 0 ? 1 : -1;
x = x1; y = y1;
for (int i=0; i
{
PutPixel(Round(x), Round(y), m_color);
y += k;
x += m*k;
}
}
}


===== Thành viên Forum Thien Than CNTT ====
Nothing!

(~~/)
(~'.'~)
(_(__)~~

nth
Admin
Admin

Tổng số bài gửi : 550
Số điểm : 1113
Số lần được cám ơn : 33
Ngày đến diễn đàn: : 01/08/2009
Tuổi : 28
Đến từ : Thiên Đường

Xem lý lịch thành viên http://thuhuong.hot4um.com

Về Đầu Trang Go down

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết