0
라인이 세로 1. 가로 2. 세로 3. 경사가 1보다 작은 모든 사례를 테스트했습니다. 이 함수는 작동하지만 오버 플로우가 발생하면 테스트 케이스를 잃어버린 것처럼 검토하고 싶습니다. 방금 위키 백과에서 알고리즘을 읽고 wikipedia 기사에서 알고리즘을 구현하려고했습니다.DDA 라인 알고리즘 구현
// Draw line using DDA Algorithm
void Graphics::DrawLine(int x1, int y1, int x2, int y2, Color&color)
{
float xdiff = x1-x2;
float ydiff = y1-y2;
int slope = 1;
if (y1 == y2 )
{
slope = 0;
}
else if ( x1 == x2)
{
slope = 2; // vertical lines have no slopes...
}
else
{
slope = (int)xdiff/ydiff;
}
if (slope <= 1)
{
int startx = 0;
int endx = 0;
if (x1 > x2)
{
startx = x2;
endx = x1;
}
else
{
startx = x1;
endx = x2;
}
float y = y1; // initial value
for(int x = startx; x <= endx; x++)
{
y += slope;
DrawPixel(x, (int)abs(y), color);
}
}
else if (slope > 1)
{
float x = x1; // initial value
int starty = 0;
int endy = 0;
if (y1 > y2)
{
starty = y2;
endy = y1;
}
else
{
starty = y1;
endy = y2;
}
for(int y = starty; y <= endy; y++)
{
x += 1/slope;
DrawPixel((int)x, y, color);
}
}
}
나는 이것이 DDA 알고리즘이 아니라고 생각합니다. Brasenham의 알고리즘이어야합니다. – anonymous