/* Copyright (C) 2011 Garrett Fleenor

 This library is free software; you can redistribute it and/or modify it
 under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation; either version 3.0 of the License, or (at
 your option) any later version.

 This library is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
 License (COPYING.txt) for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with this library; if not, write to the Free Software Foundation,
 Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 This is a port of libnoise ( http://libnoise.sourceforge.net/index.html ).  Original implementation by Jason Bevins

*/

package net.royawesome.jlibnoise.model;

import net.royawesome.jlibnoise.Utils;
import net.royawesome.jlibnoise.exception.NoModuleException;
import net.royawesome.jlibnoise.module.Module;

/**
 * Model that defines the surface of a sphere.
 * 
 * @image html modelsphere.png
 * 
 *        This model returns an output value from a noise module given the
 *        coordinates of an input value located on the surface of a sphere.
 * 
 *        To generate an output value, pass the (latitude, longitude)
 *        coordinates of an input value to the GetValue() method.
 * 
 *        This model is useful for creating: - seamless textures that can be
 *        mapped onto a sphere - terrain height maps for entire planets
 * 
 *        This sphere has a radius of 1.0 unit and its center is located at the
 *        origin.
 */
public class Sphere {
	Module module;

	/**
	 * Constructor
	 * 
	 * @param module The noise module that is used to generate the output
	 *            values.
	 */
	public Sphere(Module module) {
		if (module == null)
			throw new IllegalArgumentException("module cannot be null");
		this.module = module;
	}

	/**
	 * Returns the noise module that is used to generate the output values.
	 * 
	 * @returns A reference to the noise module.
	 * @pre A noise module was passed to the SetModule() method.
	 */
	public Module getModule() {
		return module;
	}

	/**
	 * Sets the noise module that is used to generate the output values.
	 * 
	 * @param module The noise module that is used to generate the output
	 *            values.
	 * 
	 *            This noise module must exist for the lifetime of this object,
	 *            until you pass a new noise module to this method.
	 */
	public void setModule(Module module) {
		if (module == null)
			throw new IllegalArgumentException("module cannot be null");
		this.module = module;
	}

	/**
	 * Returns the output value from the noise module given the (latitude,
	 * longitude) coordinates of the specified input value located on the
	 * surface of the sphere.
	 * 
	 * @param lat The latitude of the input value, in degrees.
	 * @param lon The longitude of the input value, in degrees.
	 * @return The output value from the noise module.
	 * @pre A noise module was passed to the SetModule() method.
	 * 
	 *      This output value is generated by the noise module passed to the
	 *      SetModule() method.
	 * 
	 *      Use a negative latitude if the input value is located on the
	 *      southern hemisphere.
	 * 
	 *      Use a negative longitude if the input value is located on the
	 *      western hemisphere.
	 */
	double getValue(double lat, double log) {
		if (module == null)
			throw new NoModuleException();
		double[] vec = Utils.LatLonToXYZ(lat, log);
		return module.GetValue(vec[0], vec[1], vec[2]);
	}
}

@@ -3483,16 +3483,23 @@
 .%0A%09 */%0A%09
+public 
 double g

Update Sphere.java