Пример #1
0
        public VectorN NormalizeR()
        {
            VectorN res = new VectorN(this);

            res.Normalize();
            return(res);
        }
Пример #2
0
        public void Collide()
        {
            DateTime t = DateTime.Now;

            contacts.Clear();

            for (int i = 0; i < particles.Count - 1; i++)
            {
                for (int j = i + 1; j < particles.Count; j++)
                {
                    if (particles[i].freezed && particles[j].freezed)
                    {
                        continue;
                    }

                    double sum = particles[i].radius + particles[j].radius;
                    if (Math.Abs(particles[i].pos.v[0] - particles[j].pos.v[0]) > sum)
                    {
                        continue;
                    }
                    if (Math.Abs(particles[i].pos.v[1] - particles[j].pos.v[1]) > sum)
                    {
                        continue;
                    }


                    VectorN normal = new VectorN(particles[i].pos);
                    normal.Sub(particles[j].pos);
                    double dist = normal.Normalize();


                    if (dist < sum)
                    {
                        Contact c = new Contact(particles[i], particles[j], normal, sum - dist);
                        c.Unfreeze();
                        contacts.Add(c);
                    }
                }
            }

            TimeSpan tt = DateTime.Now.Subtract(t);

            CDTime = (double)(tt.TotalMilliseconds);// / (double)TimeSpan.TicksPerMillisecond;
        }