コード例 #1
0
        /// Convert a parameter t ranging from 0..1 to the x-coordinate along the curve
        /// </summary>
        /// <param name="span">The span</param>
        /// <param name="center">The center of the catenary</param>
        /// <param name="w">The unit weight</param>
        /// <param name="H">The horizontal tension</param>
        /// <param name="t">A parameter from 0 to 1</param>
        /// <returns>The x-coordinate value</returns>
        public static double ParameterToX(Vector2 span, Vector2 center, double w, double H, double t)
        {
            double a = H / w;
            double L = TotalLength(span, center, w, H);

            return(center.X + a * DoubleEx.Asinh(t * L / a - Math.Sinh(center.X / a)));
        }
コード例 #2
0
        /// <summary>
        /// Calculate the maximum separation from the diagonal (sag point)
        /// </summary>
        /// <param name="span">The span</param>
        /// <param name="center">The center of the catenary (lower point)</param>
        /// <param name="w">The unit weight</param>
        /// <param name="H">The horizontal tension</param>
        /// <returns>A sag value</returns>
        public static double MaximumSag(Vector2 span, Vector2 center, double w, double H)
        {
            double a = H / w;
            double x = center.X + a * DoubleEx.Asinh(span.Y / span.X);
            double y = center.Y + a * (Math.Cosh((x - center.X) / a) - 1);

            return(span.Y / span.X * x - y);
        }
コード例 #3
0
        /// <summary>
        /// Calculate the lower point on the catenary (center point)
        /// </summary>
        /// <param name="span">The span</param>
        /// <param name="w">The unit weight</param>
        /// <param name="H">The horizontal tension</param>
        /// <returns>A position vector in (x,y) coordinates</returns>
        public static Vector2 CenterPosition(Vector2 span, double w, double H)
        {
            double a = H / w;
            double η = span.X / (2 * a);

            double xc = span.X / 2 + a * DoubleEx.Asinh((span.Y * Math.Exp(η)) / (a * (1 - Math.Exp(2 * η))));
            double yc = -a * (Math.Cosh(-xc / a) - 1);

            return(new Vector2(xc, yc));
        }
コード例 #4
0
        /// <summary>
        /// Calculate the x-coordinate for the point with maximum separation from the diagonal (sag point)
        /// </summary>
        /// <param name="span">The span</param>
        /// <param name="center">The center of the catenary (lower point)</param>
        /// <param name="w">The unit weight</param>
        /// <param name="H">The horizontal tension</param>
        /// <returns>A x-coordinate value</returns>
        public static double MaximumSagX(Vector2 span, Vector2 center, double w, double H)
        {
            double a = H / w;

            return(center.X + a * DoubleEx.Asinh(span.Y / span.X));
        }