A Semi-analytic Ray-tracing Algorithm for Weak Lensing