直线栅格化在计算机图形处理中非常常用,看了看网上的介绍比较常用的就是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); }