public static void CartesianToPolar(Point center, Point point, out double radius, out double degree) { var d = point - center; radius = d.Length; degree = GunTraverseHelper.NormalizeAngle(Math.Atan2(d.Y, d.X) * 180 / Math.PI); }
public static double RotateAngle(double from, double to, double delta, double limitRight, double limitLeft) { from = GunTraverseHelper.NormalizeAngle(from); to = GunTraverseHelper.NormalizeAngle(to); if (Math.Abs(from - to) < 0.0001) { return(to); } delta = GunTraverseHelper.NormalizeAngle(delta); double direction; if (from < to) { if (limitRight + limitLeft < 360 && from <= limitRight && to >= 360 - limitLeft) { direction = -1.0; } else if (to - from > 180) { direction = -1.0; } else { direction = 1.0; } } else { if (limitRight + limitLeft < 360 && to <= limitRight && from >= 360 - limitLeft) { direction = 1.0; } else if (from - to > 180) { direction = 1.0; } else { direction = -1.0; } } var result = from + delta * direction; if ((from < to && result > to) || (from > to && result < to)) { result = to; } return(result); }
private void UpdateRotation() { var position = Mouse.GetPosition(this.Root); double size; double radius; Point center; this.GetDimentions(out size, out radius, out center); double distance, degree; GunTraverseHelper.CartesianToPolar(center, position, out distance, out degree); degree -= this.VehicleYaw; var turretYaw = GunTraverseHelper.NormalizeAngle(degree, -180); var gunPitch = _inverseVerticalTraverseConverter(distance); this.SetRotation(turretYaw, gunPitch); }