Skip to main content
gamedev.net
🔒 Locked

Optimization needed!

Started by Slug Feb 21, 2005 at 1:06 PM 2 replies 400+ views
Original Post
Slug
Slug
Hello, i was just wondering if anyone can find a way to optimize the function down below or if it's just correct for what i need. This function only have to do 90 deg. rotation. Here is is: //struct CThreeFltpoint = float x,y,z; CThreeFltpoint RotateCoord(CThreeFltpoint CoordVal, CThreeFltpoint CenterVal, int Dir) { //Convert center format CenterVal.X -= PreCalc.X_RowLengthPlus1Div2; CenterVal.Y -= PreCalc.Y_RowLengthPlus1Div2; CenterVal.Z -= PreCalc.Z_RowLengthPlus1Div2; //Convert coord format CoordVal.X -= PreCalc.X_RowLengthPlus1Div2; CoordVal.Y -= PreCalc.Y_RowLengthPlus1Div2; CoordVal.Z -= PreCalc.Z_RowLengthPlus1Div2; //Move the rotation pts TO 0,0,0 CoordVal.X -= CenterVal.X; CoordVal.Y -= CenterVal.Y; CoordVal.Z -= CenterVal.Z; //Rotate... switch(Dir) { double Tmp; case X_ClkWse: Tmp = CoordVal.Y; CoordVal.Y = 0.0f-CoordVal.Z; CoordVal.Z = Tmp; break; case X_CntClkWse: Tmp = CoordVal.Y; CoordVal.Y = CoordVal.Z; CoordVal.Z = 0.0f-Tmp; break; case Y_ClkWse: Tmp = CoordVal.X; CoordVal.X = CoordVal.Z; CoordVal.Z = 0.0f-Tmp; break; case Y_CntClkWse: Tmp = CoordVal.X; CoordVal.X = 0.0f-CoordVal.Z; CoordVal.Z = Tmp; break; case Z_ClkWse: Tmp = CoordVal.X; CoordVal.X = 0.0f-CoordVal.Y; CoordVal.Y = Tmp; break; case Z_CntClkWse: Tmp = CoordVal.X; CoordVal.X = CoordVal.Y; CoordVal.Y = 0.0f-Tmp; break; } //Move the rotation pts to origin(not to center) CoordVal.X += CenterVal.X; CoordVal.Y += CenterVal.Y; CoordVal.Z += CenterVal.Z; //Re-convert coord format CoordVal.X += PreCalc.X_RowLengthPlus1Div2; CoordVal.Y += PreCalc.Y_RowLengthPlus1Div2; CoordVal.Z += PreCalc.Z_RowLengthPlus1Div2; //Return values return CoordVal; }
Evil Steve
Evil Steve
There's not a lot you can do to the code in the function. However, you could change the parameters to take const CThreeFltpoint&'s instead of CThreeFltpoint's.
You could also write 6 versions of the function to avoid the switch() statement, but that might not be worth it.

How do you know you need to optimize this function? Have you profiled?
christopherstott
christopherstott
Is dir known at compile time? You could use template specialisation to totally avoid the switch and the expensive branching attached to it.

Chris

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.