improment on bilinerinterpolation