获得2点之间 所有点的坐标 --布雷森汉姆直线演算法 OC版本

来源:互联网 发布:免费的流程图软件 编辑:程序博客网 时间:2024/04/30 05:37

不多说,上代码

-(NSArray*)getAllPointsFromPoint:(CGPoint)fPoint toPoint:(CGPoint)tPoint
{
    NSMutableArray *ret = [NSMutableArray array];
    float deltaX = fabsf(tPoint.x - fPoint.x);
    float deltaY = fabsf(tPoint.y - fPoint.y);
    float x = fPoint.x;
    float y = fPoint.y;
    float err = deltaX-deltaY;

    float sx = -0.5;
    float sy = -0.5;
    if(fPoint.x<tPoint.x)
        sx = 0.5;


    if(fPoint.y<tPoint.y)
        sy = 0.5;


    do 

    {

        [ret addObject:[NSValue valueWithCGPoint:CGPointMake(x, y)]];
        float e = 2*err;
        if(e > -deltaY)
        {
            err -=deltaY;
            x +=sx; 
        }
        if(e < deltaX)
        {
            err +=deltaX;
            y+=sy;
        }
    } while (round(x)  != round(tPoint.x) && round(y) != round(tPoint.y));
    [ret addObject:[NSValue valueWithCGPoint:tPoint]];//add final point


    return ret;
}


可以到wiki上看到这个算法说明

英文版:http://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

中文版:http://zh.wikipedia.org/wiki/布雷森漢姆直線演算法

0 0
原创粉丝点击