2010-10-28 102 views
0

你好傢伙: 我必須在將它們繪製在一個框架上之前投射很多點。 我的代碼是打擊:如何使矩陣計算更快?

-(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]]; 
} 

因此,該方法 「 - (協調*)transformWorldTo3D:(協調*)PT」 被稱爲幾百倍,因爲突出。

但我發現它是非常非常慢,而調用transformWorldTo3D! 有沒有另一種方法來加速它?或者使用另一個可以更快計算投影值的框架?

+0

你能添加調用transformWorldTo3D – Manny 2010-10-28 03:44:07

回答

2

對象分配是昂貴的(相對於算術運算);看來你正在爲每個點做2個alloc-init-autorelease序列。

我的第一個建議是嘗試用CGPoints做一些這項工作,並避免分配。

(其實,這是我的第二個建議:我首先是分析代碼,看看那裏的時間被消耗。)

+0

我曾用CGPoint並存儲到代碼NSMutableArray通過NSValue,但它沒有顯着差異。在測試執行時間之後,瓶頸是CGPointApplyAffineTransform – catskytw 2010-10-28 04:06:45