求取多边形矩形包围框的中心点方法

今天下午做了一下游戏功能的扩充,不料又落马了,记录一下~

/**
 * 求取多边形的中心位置(该方法是最原始版,之前因为用的少,所以没有发觉到逻辑上存在错误)~
 * Added By Bruce Yang on 2012.09.02.15.30~
 * 实践证明,这个方法的逻辑是错误的,汲取这个教训~
 */
+(b2Vec2) getPolyCenterLogicWrong0:(BYPolygon*)polygon {
    b2Vec2* vertices = polygon.vertices;
    int iVerticesCount = polygon.verticesCount;
    float xSum = 0.0f;
    float ySum = 0.0f;
    for(int i = 0; i < iVerticesCount; ++ i) {
        xSum += vertices[i].x;
        ySum += vertices[i].y;
    }
    return b2Vec2(xSum / iVerticesCount, ySum / iVerticesCount);
}


/**
 * Added on 2012.09.02.12.46~
 * 发现上面方法的错误以后,我做了一个修正,发现错误依然存在,甚至一度让我深陷泥潭~
 */
+(b2Vec2) getPolyCenterLogicWrong1:(BYPolygon*)polygon {
    b2Vec2* vertices = polygon.vertices;
    int iVerticesCount = polygon.verticesCount;
    
    float fMinX = 0, fMaxX = 0;
    float fMinY = 0, fMaxY = 0;
    for(int i = 0; i < iVerticesCount; ++ i) {
        b2Vec2 item = vertices[i];
        if(item.x < fMinX) {
            fMinX = item.x;
        } else if(item.x > fMaxX) {
            fMaxX = item.x;
        }
        
        if(item.y < fMinY) {
            fMinY = item.y;
        } else if(item.y > fMaxY) {
            fMaxY = item.y;
        }
    }
    return b2Vec2((fMinX + fMaxX) / 2.0f, (fMinY + fMaxY) / 2.0f);
}


/**
 * Added on 2012.09.02.12.46~
 * 备注:求取多边形矩形包围框的中心点的终极版方法~
 * 让我迷茫了许久啊,数学没学好脑筋就是转不灵光,哎...
 */
+(b2Vec2) getPolyCenterFixed:(BYPolygon*)polygon {
    b2Vec2* vertices = polygon.vertices;
    int iVerticesCount = polygon.verticesCount;
    
    float fMinX, fMaxX, fMinY, fMaxY;
    for(int i = 0; i < iVerticesCount; ++ i) {
        b2Vec2 item = vertices[i];
        if(i != 0) {
            if(item.x < fMinX) {
                fMinX = item.x;
            }
            if(item.x > fMaxX) {
                fMaxX = item.x;
            }
            if(item.y < fMinY) {
                fMinY = item.y;
            }
            if(item.y > fMaxY) {
                fMaxY = item.y;
            }
        } else {
            fMinX = item.x;
            fMaxX = item.x;
            fMinY = item.y;
            fMaxY = item.y;
        }
    }
    
    return b2Vec2((fMinX + fMaxX) / 2.0f, (fMinY + fMaxY) / 2.0f);
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值