public void insert(ParabolaPoint parabolapoint, double sline, EventQueue eventqueue) throws Throwable {

		boolean split = true;
		if (next != null) {
			next.init(sline);
			if (sline > next.x && sline > x) {
				double xs[] = solveQuadratic(a - next.a, b - next.b, c - next.c);
				if (xs[0] <= parabolapoint.realX() && xs[0] != xs[1]) {
					split = false;
				}
			}
			else {
				split = false;
			}
		}

		if (split) {

			removeCircle(eventqueue);

			ArcNode arcnode = new ArcNode(parabolapoint);
			arcnode.next = new ArcNode(this);
			arcnode.prev = this;
			arcnode.next.next = next;
			arcnode.next.prev = arcnode;

			if (next != null)
				next.prev = arcnode.next;

			next = arcnode;

			checkCircle(eventqueue);
			next.next.checkCircle(eventqueue);

			next.next.startOfTrace = startOfTrace;
			startOfTrace = new MyPoint(sline - F(parabolapoint.y), parabolapoint.y);
			next.startOfTrace = new MyPoint(sline - F(parabolapoint.y), parabolapoint.y);

		}
		else {
			next.insert(parabolapoint, sline, eventqueue);
		}
	}