include "NSLog.incl" // --- Mean calculation --- double local fn mean( array as CFArrayRef ) double sum = 0.0 for CFNumberRef num in array sum += fn NumberDoubleValue( num ) next end fn = sum / fn ArrayCount( array ) // --- Standard deviation calculation --- double local fn stddev( array as CFArrayRef ) double meanValue = fn mean(array) double sum = 0.0 for CFNumberRef num in array double diff = fn NumberDoubleValue( num ) - meanValue sum += diff * diff next end fn = fn sqrt(sum / fn ArrayCount( array ) ) void local fn DemingFunnel CFArrayRef dx = @[ @(-0.533), @(0.270), @(0.859), @(-0.043), @(-0.205), @(-0.127), @(-0.071), @(0.275), @(1.251), @(-0.231), @(-0.401), @(0.269), @(0.491), @(0.951), @(1.150), @(0.001), @(-0.382), @(0.161), @(0.915), @(2.080), @(-2.337), @(0.034), @(-0.126), @(0.014), @(0.709), @(0.129), @(-1.093), @(-0.483), @(-1.193), @(0.020), @(-0.051), @(0.047), @(-0.095), @(0.695), @(0.340), @(-0.182), @(0.287), @(0.213), @(-0.423), @(-0.021), @(-0.134), @(1.798), @(0.021), @(-1.099), @(-0.361), @(1.636), @(-1.134), @(1.315), @(0.201), @(0.034), @(0.097), @(-0.170), @(0.054), @(-0.553), @(-0.024), @(-0.181), @(-0.700), @(-0.361), @(-0.789), @(0.279), @(-0.174), @(-0.009), @(-0.323), @(-0.658), @(0.348), @(-0.528), @(0.881), @(0.021), @(-0.853), @(0.157), @(0.648), @(1.774), @(-1.043), @(0.051), @(0.021), @(0.247), @(-0.310), @(0.171), @(0.000), @(0.106), @(0.024), @(-0.386), @(0.962), @(0.765), @(-0.125), @(-0.289), @(0.521), @(0.017), @(0.281), @(-0.749), @(-0.149), @(-2.436), @(-0.909), @(0.394), @(-0.113), @(-0.598), @(0.443), @(-0.521), @(-0.799), @(0.087)] CFArrayRef dy = @[ @(0.136), @(0.717), @(0.459), @(-0.225), @(1.392), @(0.385), @(0.121), @(-0.395), @(0.490), @(-0.682), @(-0.065), @(0.242), @(-0.288), @(0.658), @(0.459), @(0.000), @(0.426), @(0.205), @(-0.765), @(-2.188), @(-0.742), @(-0.010), @(0.089), @(0.208), @(0.585), @(0.633), @(-0.444), @(-0.351), @(-1.087), @(0.199), @(0.701), @(0.096), @(-0.025), @(-0.868), @(1.051), @(0.157), @(0.216), @(0.162), @(0.249), @(-0.007), @(0.009), @(0.508), @(-0.790), @(0.723), @(0.881), @(-0.508), @(0.393), @(-0.226), @(0.710), @(0.038), @(-0.217), @(0.831), @(0.480), @(0.407), @(0.447), @(-0.295), @(1.126), @(0.380), @(0.549), @(-0.445), @(-0.046), @(0.428), @(-0.074), @(0.217), @(-0.822), @(0.491), @(1.347), @(-0.141), @(1.230), @(-0.044), @(0.079), @(0.219), @(0.698), @(0.275), @(0.056), @(0.031), @(0.421), @(0.064), @(0.721), @(0.104), @(-0.729), @(0.650), @(-1.103), @(0.154), @(-1.720), @(0.051), @(-0.385), @(0.477), @(1.537), @(-0.901), @(0.939), @(-0.411), @(0.341), @(-0.411), @(0.106), @(0.224), @(-0.947), @(-1.424), @(-0.542), @(-1.032)] for int rule = 1 to 4 NSLog( @"\nRule %d", rule ) CFMutableArrayRef ddx = fn MutableArrayNew double tx = 0 for CFNumberRef x in dx double xv = fn NumberDoubleValue( x ) MutableArrayAddObject( ddx, @(tx + xv) ) if (rule == 1) then tx = 0 if (rule == 2) then tx = -xv if (rule == 3) then tx = -tx - xv if (rule == 4) then tx = tx + xv next CFMutableArrayRef ddy = fn MutableArrayNew double ty = 0 for CFNumberRef y in dy double yv = fn NumberDoubleValue( y ) MutableArrayAddObject( ddy, @(ty + yv) ) // Apply transformation rule manually if (rule == 1) then ty = 0 if (rule == 2) then ty = -yv if (rule == 3) then ty = -ty - yv if (rule == 4) then ty = ty + yv next NSLog( @"Mean x, y : %7.4f %7.4f", fn mean(ddx), fn mean(ddy) ) NSLog( @"Std dev x, y : %7.4f %7.4f", fn stddev(ddx), fn stddev(ddy) ) next end fn fn DemingFunnel HandleEvents