The main problem that during approaching, copter has an angle to direction, and a speed. When closer to destination, angle starts to decrease. And the speed a little bit, too. But, when copter hits the target, it will have 0 angle, but not 0 speed! So it will overrun and starts to lean to the opposite direction. When it stops, it will have some degrees angle, so it starts to accelerate towards to the destination. So when hits target again, it WILL HAVE SPEED!!!!!! So overrun continues.
In wind, the situation is a little bit different, when copter is behind the target, it will slow down before hits target because of the wind. And will calm down some meters away from target. BUT! Try RTH when copter is before the target in wind! It will have serious speed to the ground, and will owerrun much more on target!!!! When wind is high enough, it can be scarry!!!
That's why it is important to regulate the angle based on speed not distance!!! Because then, ie. wind can be compensated as much as overruns in calm day. Because, when approaching, copter can achieve negative angles before target to slow down.
Unfortunatelly, GPS speed data is not accurate enough especially in low speeds, so speed should have calculated from coordinates, they are accurate enough. And, since we have a secondary arduino (EOSBandi), such calculations can be simply done without overlading the main processor...
I wish I would know programming, its hard to have the regulation process in my mind but not able to write down with program code....
:(:(:(:(
EDIT: Arducopter CODE already HAS this type of speed calculations and regulation method !!!!!!!!!!!!!!!!!!!!!!