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

               

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

/** * 求取多边形的中心位置(该方法是最原始版,之前因为用的少,所以没有发觉到逻辑上存在错误)~ * 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值