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

这篇博客记录了在Java中求取多边形矩形包围框中心点的方法,包括最初存在错误的实现,以及经过修正后的正确解决方案。通过遍历多边形顶点找到最小和最大坐标,最终计算出中心点坐标。
摘要由CSDN通过智能技术生成

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

/**

* 求取多边形的中心位置(该方法是最原始版,之前因为用的少,所以没有发觉到逻辑上存在错误)~

* 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);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值