Esempio n. 1
0
        public Vector3d GeodesicTorsionAt(double t)
        {
            var c = Curve.DerivativeAt(t, 4);

            var theta   = Integrate.AdaptiveSimpson(u => TorsionAt(u), Curve.Domain.T0, t, 0.001);
            var theta_1 = TorsionAt(t);

            var a   = Vector3d.CrossProduct(c[1], c[2]);
            var a_1 = Vector3d.CrossProduct(c[1], c[3]) + Vector3d.CrossProduct(c[2], c[2]);

            var d   = a * c[3];
            var d_1 = a * c[4];

            var delta   = c[1].Length;
            var delta_1 = c[1] * c[2] / c[1].Length;

            var alpha   = a.Length;
            var alpha_1 = a * a_1 / a.Length;

            var T   = c[1] / delta;
            var T_1 = (delta * c[2] - c[1] * delta_1) / Math.Pow(delta, 2);

            var B   = a / alpha;
            var B_1 = (alpha * a_1 - a * alpha_1) / Math.Pow(alpha, 2);

            var N   = Vector3d.CrossProduct(B, T);
            var N_1 = Vector3d.CrossProduct(B, T_1) + Vector3d.CrossProduct(B_1, T);

            var e2 = N * Math.Cos(theta) + B * Math.Sin(theta);

            var e3   = B * Math.Cos(theta) - N * Math.Sin(theta);
            var e3_1 = Math.Cos(theta) * (B_1 - N * theta_1) - Math.Sin(theta) * (N_1 + B * theta_1);

            return(e3_1 * e2 * c[1] / c[1].SquareLength);
        }
Esempio n. 2
0
        public Plane FrameAt(double t)
        {
            var t0 = Curve.Domain.T0;

            var theta = Integrate.AdaptiveSimpson(TorsionAt, t0, t, 0.001);

            var c = Curve.DerivativeAt(t, 3);

            var a     = Vector3d.CrossProduct(c[1], c[2]);
            var d     = a * c[3];
            var delta = c[1].Length;
            var alpha = a.Length;

            var P = c[0];
            var T = c[1] / delta;
            var B = a / alpha;
            var N = Vector3d.CrossProduct(B, T);

            var e2 = N * Math.Cos(theta) + B * Math.Sin(theta);
            var e3 = B * Math.Cos(theta) - N * Math.Sin(theta);

            return(new Plane(new Point3d(P), e2, e3));
        }