public override bool HitTest(Point p)
        {
            double radius = Radius + 2;
            double dist   = VectorTools.Distance(position, p);

            if (dist < radius)
            {
                return(true);
            }

            return(false);
        }
        protected virtual void UpdateBounces(TimeSpan duration)
        {
            Parallel.ForEach(quadTree.AllQuadrants(), quad =>
            {
                for (int i = 0; i < quad.Nodes.Count; i++)
                {
                    NodeBase nodeA = quad.Nodes[i];

                    // find bounces
                    for (int j = i + 1; j < quad.Nodes.Count; j++)
                    {
                        NodeBase nodeB = quad.Nodes[j];

                        double dist = VectorTools.Distance(nodeA.Position, nodeB.Position);
                        if (dist <= nodeA.Radius + nodeB.Radius)
                        {
                            CalcNodeCollision(nodeA, nodeB, bounceEfficiency);
                        }
                    }
                }
            });
        }