public void addArc(double arcWidth, double arcHeight, double start, double sweep) {
		if (complete) {
			throw new ErrorException("You can't add edges to a GPolygon that has been "
			                         + "marked as complete.");
		}
		synchronized (lock) {
			double aspectRatio = arcHeight / arcWidth;
			double rx = arcWidth / 2.0;
			double ry = arcHeight / 2.0;
			double x0 = cx - rx * GMath.cosDegrees(start);
			double y0 = cy + ry * GMath.sinDegrees(start);
			if (sweep > 359.99) sweep = 360;
			if (sweep < -359.99) sweep = -360;
			double dt = Math.atan2(1, Math.max(arcWidth, arcHeight));
			int nSteps = (int) (GMath.toRadians(Math.abs(sweep)) / dt);
			dt = GMath.toRadians(sweep) / nSteps;
			double theta = GMath.toRadians(start);
			for (int i = 0; i < nSteps; i++) {
				theta += dt;
				double px = x0 + rx * Math.cos(theta);
				double py = y0 - rx * Math.sin(theta) * aspectRatio;
				addVertex(px, py);
			}
		}
	}