public VectorN NormalizeR() { VectorN res = new VectorN(this); res.Normalize(); return(res); }
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; }