Thuật toán DDA_Line dạng tổng quát
Trang 1 trong tổng số 1 trang
Thuật toán DDA_Line dạng tổng quát
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 đó.
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 sửa bởi nth ngày 10/12/09, 04:17 am; sửa lần 1.
Re: Thuật toán DDA_Line dạng tổng quát
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;
}
}
}
Similar topics
» Demo thuật toán tổng quát
» Tính Biểu Thức Toán Dạng Hậu Tố.
» thuật toán Midpoint
» Thuật toán vẽ Elip
» Thuật toán vẽ Đường Thẳng
» Tính Biểu Thức Toán Dạng Hậu Tố.
» thuật toán Midpoint
» Thuật toán vẽ Elip
» Thuật toán vẽ Đường Thẳng
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|