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