コード例 #1
0
        public void Calculate()
        {
            if (navigator.controls.showPreview)
            {
                // Destroy existing lines
                if (segments != null)
                {
                    foreach (var segment in segments)
                    {
                        if (segment.line != null)
                        {
                            UnityEngine.Object.Destroy(segment.line);
                        }
                    }
                }
                // New segments array
                segments = new PreviewSegment[navigator.controls.ncontrols];
                // Beginning time
                double UT0          = navigator.controls.UT0;
                Orbit  orbitInitial = navigator.vessel.orbit;
                // Initial mass per segment
                double m0i = navigator.vessel.GetTotalMass();
                // Calculate each segment
                for (var i = 0; i < segments.Length; i++)
                {
                    // End time
                    double UTf = UT0 + navigator.controls.controls[i].duration;
                    // Calculate segment
                    segments[i] = new PreviewSegment(navigator, orbitInitial, UT0, UTf, navigator.controls.controls[i], navigator.controls.controls[i].color, m0i);
                    // Update initial mass for next segment
                    m0i = segments[i].m1;
                    // Update initial time
                    UT0 = UTf;
                    // Update initial orbit
                    orbitInitial = segments[i].orbitf;
                }

                // Final time of trajectory
                this.UTf = UT0;

                // Draw one complete final orbit
                // Destroy existing line
                if (linef != null)
                {
                    UnityEngine.Object.Destroy(linef);
                }
                // Create linerenderer & object
                var objf = new GameObject("Final orbit");
                linef = objf.AddComponent <LineRenderer>();
                linef.useWorldSpace = false;
                objf.layer          = 10; // Map
                linef.material      = MapView.fetch.orbitLinesMaterial;
                linef.SetColors(navigator.controls.colorFinal, navigator.controls.colorFinal);
                linef.SetVertexCount(361);
                // 3D points to use in linef
                linefPoints = new Vector3d[361];
                // Final orbit of trajectory
                orbitf = orbitInitial;
                // Period of final orbit
                double TPf = orbitf.period;
                // Populate points
                for (var i = 0; i <= 360; i++)
                {
                    double UTi = this.UTf + i * TPf / 360;
                    // Relative orbitf position
                    Vector3d rRelOrbitf = orbitf.getRelativePositionAtUT(UTi).xzy;
                    // Absolute position
                    linefPoints[i] = rRelOrbitf;
                }

                // Target line
                CalculateTargetLine();
            }
        }
コード例 #2
0
        public void Calculate()
        {
            if (navigator.controls.showPreview) {
            // Destroy existing lines
            if (segments != null) {
            foreach(var segment in segments) {
            if (segment.line != null) {
                UnityEngine.Object.Destroy(segment.line);
            }
            }
            }
            // New segments array
            segments = new PreviewSegment[navigator.controls.ncontrols];
            // Beginning time
            double UT0 = navigator.controls.UT0;
            Orbit orbitInitial = navigator.vessel.orbit;
            // Initial mass per segment
            double m0i = navigator.vessel.GetTotalMass();
            // Calculate each segment
            for (var i = 0; i < segments.Length; i++) {
            // End time
            double UTf = UT0 + navigator.controls.controls[i].duration;
            // Calculate segment
            segments[i] = new PreviewSegment(navigator, orbitInitial, UT0, UTf, navigator.controls.controls[i], navigator.controls.controls[i].color, m0i);
            // Update initial mass for next segment
            m0i = segments[i].m1;
            // Update initial time
            UT0 = UTf;
            // Update initial orbit
            orbitInitial = segments[i].orbitf;
            }

            // Final time of trajectory
            this.UTf = UT0;

            // Draw one complete final orbit
            // Destroy existing line
            if (linef != null) {
            UnityEngine.Object.Destroy(linef);
            }
            // Create linerenderer & object
            var objf = new GameObject("Final orbit");
            linef = objf.AddComponent<LineRenderer>();
            linef.useWorldSpace = false;
            objf.layer = 10; // Map
            linef.material = MapView.fetch.orbitLinesMaterial;
            linef.SetColors(navigator.controls.colorFinal, navigator.controls.colorFinal);
            linef.SetVertexCount(361);
            // 3D points to use in linef
            linefPoints = new Vector3d[361];
            // Final orbit of trajectory
            orbitf = orbitInitial;
            // Period of final orbit
            double TPf = orbitf.period;
            // Populate points
            for(var i = 0; i <= 360; i++) {
            double UTi = this.UTf + i * TPf / 360;
            // Relative orbitf position
            Vector3d rRelOrbitf = orbitf.getRelativePositionAtUT(UTi).xzy;
            // Absolute position
            linefPoints[i] = rRelOrbitf;
            }

            // Target line
            CalculateTargetLine();
            }
        }