今天下午做了一下游戏功能的扩充,不料又落马了,记录一下~
/**
* 求取多边形的中心位置(该方法是最原始版,之前因为用的少,所以没有发觉到逻辑上存在错误)~
* 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);
}