如何使矩阵计算更快?

时间:2010-10-28 03:36:51

标签: iphone

大家好: 在绘制框架之前,我必须投射许多点。 我的代码很震撼:

-(Coordination*)xyWorldToDev:(Coordination*)pt isIphoneYAxis:(BOOL)isIphoneYAxis{
    CGPoint tmpPoint=CGPointApplyAffineTransform(CGPointMake(pt.x,pt.y),worldToDevMatrix);
    Coordination *resultPoint=[[[Coordination alloc]initWithXY:tmpPoint.x withY:(isIphoneYAxis)?(sscy-tmpPoint.y):tmpPoint.y]autorelease];
    return resultPoint; }

-(Coordination*)xyDevTo3D:(Coordination*)cPt{
    double x=0.0,y=0.0;
    double divide=1+m_cView3DPara.v*cPt.y;
    x=(m_cView3DPara.a*cPt.x+m_cView3DPara.b*cPt.y+m_cView3DPara.e)/divide;
    y=(m_cView3DPara.d*cPt.y+m_cView3DPara.f)/divide;
    return [[[Coordination alloc]initWithXY:x withY:sscy-y]autorelease];
}
-(Coordination*)transformWorldTo3D:(Coordination*)pt{
    return [self xyDevTo3D:[self xyWorldToDev:pt isIphoneYAxis:NO]];
} 

因此,方法“ - (Coordination *)transformWorldTo3D :( Coordination *)pt”因为投影而被调用数百次。

但是在调用transformWorldTo3D时我发现它非常缓慢! 还有另一种加速方式吗?或者使用另一个可以更快地计算投影值的框架?

1 个答案:

答案 0 :(得分:2)

对象分配很昂贵(相对于算术运算);并且看起来你正在为每个点做2个alloc-init-autorelease序列。

我的第一个建议是尝试使用CGPoint来完成部分工作并避免分配。

(实际上,这是我的第二个建议:我的第一个建议是剖析代码以查看花费的时间。)