/// <summary>
        /// 現在の粒子を取得する
        /// </summary>
        /// <returns>現在の粒子の複製</returns>
        public Particle[] GetParticles()
        {
            // 複製配列を作成して、粒子群を複製
            var clone = new Particle[this.particles.Length];
            this.particles.CopyTo(clone, 0);

            // 複製したものを返す
            return clone;
        }
        /// <summary>
        /// 粒子を追加する
        /// </summary>
        /// <param name="particle">追加する粒子</param>
        public void AddParticle(Particle particle)
        {
            // 入力粒子に追加
            this.inputParticles.Add(particle);

            // 準備処理の時に
            this.prepare = () =>
            {
                // 新しい粒子群配列を生成
                var newParticles = new Particle[this.particles.Length + this.inputParticles.Count];

                // 古い粒子群を新しい粒子群に複製
                this.particles.CopyTo(newParticles, 0);

                // 入力粒子群を新しい粒子群に複製
                this.inputParticles.CopyTo(newParticles, this.particles.Length);

                // 新しい粒子群を今の粒子群とする
                this.particles = newParticles;

                // 入力粒子群を空にする
                this.inputParticles.Clear();

                // 準備処理は空
                this.prepare = () => { };
            };
        }