
Parametric surface generation: execution time comparisons

s.r.chinn
I also give comparative timings below. The speed of execution may be relevant in showing dynamic evolution of parametric functions in Gizmo displays, particularly with the better Gizmo integration in IP7. The examples shown all generate the same Mobius strip. When drawing parametric surfaces srcWave is a 3D wave where the first layer corresponds to the X-values, the second to the Y-values and the third to the Z-values of data points.
Function makeMobius(pointsx,pointsy,tmin,tmax) // Igor Example Variable pointsx,pointsy,tmin,tmax Variable i,j,s,arg,ds,tt,dt Make/O/n=(pointsx,pointsy,3) mobius ds=2*pi/(pointsx-1) dt=(tmax-tmin)/(pointsy-1) for(i=0;i<pointsx;i+=1) s=i*ds for(j=0;j<pointsy;j+=1) tt=tmin+j*dt arg=1+cos(s/2)*tt mobius[i][j][0]=cos(s)*arg mobius[i][j][1]=sin(s)*arg mobius[i][j][2]=tt*sin(s/2) endfor endfor End Function makeMobiusP(pointsx, pointsy) variable pointsx, pointsy // x(u,v) = (1 + (v/2)*cos(u/2) ) * cos(u) // y(u,v) = (1 + (v/2)*cos(u/2) ) * sin(u) // z(u,v) = (v/2) * sin(u/2) Make/O/FREE/N=(pointsx,pointsy) wX, wY, wZ setscale/I x, 0, 2*pi,"", wX, wY, wZ // u setscale/I y, -1, 1, "", wX, wY, wZ // v wX = (1+(y/2)*cos(x/2)) * cos(x) // above tt -> y/2 (with pointsy) wY = (1+(y/2)*cos(x/2)) * sin(x) wZ = (y/2)*sin(x/2) Make/O/N=(pointsx, pointsy,21,3) wMobius Concatenate /O {wX, wY, wZ}, wMobius End Function makeMobiusP2(pointsx, pointsy) variable pointsx, pointsy Make/O/N=(pointsx,pointsy,3) wMobius setscale/I x, 0, 2*pi,"", wMobius // u setscale/I y, -1, 1, "", wMobius // v wMobius[][][0] = (1+(y/2)*cos(x/2)) * cos(x) wMobius[][][1] = (1+(y/2)*cos(x/2)) * sin(x) wMobius[][][2] = (y/2)*sin(x/2) End
The timing results (using 10,000 iterations per test) with 51 x-parameter and 53 y-parameter points are:
Mobius: 2571.55 microseconds per iteration MobiusP: 924.64 microseconds per iteration MobiusP2: 745.831 microseconds per iteration
Your mileage may vary.

Forum

Support

Gallery
Igor Pro 9
Learn More
Igor XOP Toolkit
Learn More
Igor NIDAQ Tools MX
Learn More