예제 #1
0
        /// <summary>
        /// Отрисовка траектории движения частицы
        /// </summary>
        /// <param name="args">Параметры модели</param>
        /// <returns>Путь к html-файлу с графиком движения частицы</returns>
        public static string BuildPlot(TrajectoryCalculatorArgs args)
        {
            var points = TrajectoryCalculator.Calculate(args);
            var plot   = new Plot
                         (
                Plot.traces
                (
                    Traces.scatter3d
                    (
                        Scatter3d.x(GetCoordinates(points, point => point.X)),
                        Scatter3d.y(GetCoordinates(points, point => point.Y)),
                        Scatter3d.z(GetCoordinates(points, point => point.Z)),
                        Scatter3d.mode(Scatter3d.Mode.lines())
                    )
                ),
                Plot.layout
                (
                    Layout.autosize(true),
                    Layout.margin
                    (
                        Margin.l(0),
                        Margin.t(0),
                        Margin.r(0),
                        Margin.b(0)
                    ),
                    Layout.scene
                    (
                        Scene.Aspectmode.data()
                    )
                )
                         );
            var plotFileName = "plot.html";

            File.WriteAllText
            (
                plotFileName,
                plot
                .Render()
                .ToString()
                .Replace("<body>", "<body style=\"overflow: hidden\">")
                .Replace("height: 100%", "height: 100vh;")
                .Replace("https://cdn.plot.ly/plotly-latest.min.js", "plotly.js")
            );
            return(plotFileName);
        }
예제 #2
0
        /// <summary>
        /// Расчет траектории движения заряженной частицы в магнитном поле
        /// </summary>
        /// <param name="args">Параметры модели</param>
        /// <returns>Траектория движения частицы</returns>
        public static List <Vector3D> Calculate(TrajectoryCalculatorArgs args)
        {
            Requires.NotNull(args, nameof(args), "Не заданы параметры движения частицы");
            var      dt = args.T / args.N;
            Vector3D a;
            var      v          = args.V0;
            var      r          = args.R0;
            var      trajectory = new List <Vector3D>();

            trajectory.Add(args.R0);
            for (var i = 0; i < args.N; i++)
            {
                a = args.Q / args.M * v.Cross(args.B);
                r = r + v * dt + a * dt * dt / 2;
                v = v + a * dt;
                trajectory.Add(r);
            }
            return(trajectory);
        }