您不需要360点路径.相反,在拖动时,使用计算当前角度Math.Atan2(Y,X),然后在圆上生成点.您仍然需要计算center并radius调整大小并存储它们,或者在MouseMove中计算它们.
private void UserControl_MouseMove(object sender, MouseEventArgs e)
{
if (!isDraggingMarker)
return;
var position = e.GetPosition(this);
double angle = Math.Atan2(position.Y - center.Y, position.X - center.X);
var closest = new Point(center.X + radius*Math.Cos(angle),
center.Y + radius*Math.Sin(angle));
SetMarkerPosition(closest);
}
Run Code Online (Sandbox Code Playgroud)