直线栅格化在计算机图形处理中非常常用,看了看网上的介绍比较常用的就是Bresenham 算法,搜索了下网上的算法,试了试,有的有问题,自己写了一个,测试通过。
#include <stdio.h>
#include <stdlib.h>
void LinearGrid (int x1, int y1, int x2 , int y2)
{
int dx = abs( x2 - x1 );
int dy = abs( y2 - y1 );
int x = x1;
int y = y1;
int sx = x2 > x1 ? 1 : -1;
int sy = y2 > y1 ? 1 : -1;
if (dx > dy)
{
int e = -dx;
for (int i = 0; i < dx ; i ++)
{
x += sx ;
e += 2 * dy ;
if (e >= 0)
{
y += sy ;
e -= 2 * dx ;
}
printf("[%d, %d]\n" , x, y);
}
}
else
{
int e = -dy;
for (int i = 0; i < dy ; i ++)
{
y += sy ;
e += 2 * dx ;
if (e >= 0)
{
x += sx ;
e -= 2 * dy ;
}
printf("[%d, %d]\n" , x, y);
}
}
}
void map (int x, int y)
{
for (int j = 0; j <= y ; j ++)
{
for (int i = 0; i <= x ; i ++)
{
printf("[%d, %d]" , i, j);
}
printf("\n" );
}
printf("\n\n\n" );
}
int main (int argc, char * argv[])
{
map(5, 5);
LinearGrid(3, 2, 1, 0);
}