Package libnoiseforjava.model

Source Code of libnoiseforjava.model.Line

/*
* Copyright (C) 2003, 2004 Jason Bevins (original libnoise code)
* Copyright � 2010 Thomas J. Hodge (java port of libnoise)
*
* This file is part of libnoiseforjava.
*
* libnoiseforjava is a Java port of the C++ library libnoise, which may be found at
* http://libnoise.sourceforge.net/.  libnoise was developed by Jason Bevins, who may be
* contacted at jlbezigvins@gmzigail.com (for great email, take off every 'zig').
* Porting to Java was done by Thomas Hodge, who may be contacted at
* libnoisezagforjava@gzagmail.com (remove every 'zag').
*
* libnoiseforjava is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* libnoiseforjava 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* libnoiseforjava.  If not, see <http://www.gnu.org/licenses/>.
*
*/

package libnoiseforjava.model;

import libnoiseforjava.module.ModuleBase;

public class Line
{

   /// Model that defines the displacement of a line segment.
   ///
   /// This model returns an output value from a noise module given the
   /// one-dimensional coordinate of an input value located on a line
   /// segment, which can be used as displacements.
   ///
   /// This class is useful for creating:
   ///  - roads and rivers
   ///  - disaffected college students
   ///
   /// To generate an output value, pass an input value between 0.0 and 1.0
   /// to the getValue() method.  0.0 represents the start position of the
   /// line segment and 1.0 represents the end position of the line segment.
  

   /// A flag that specifies whether the value is to be attenuated
   /// (moved toward 0.0) as the ends of the line segment are approached.
   boolean attenuate;

   /// A pointer to the noise module used to generate the output values.
   ModuleBase module;

   /// @a x coordinate of the start of the line segment.
   double x0;

   /// @a x coordinate of the end of the line segment.
   double x1;

   /// @a y coordinate of the start of the line segment.
   double y0;

   /// @a y coordinate of the end of the line segment.
   double y1;

   /// @a z coordinate of the start of the line segment.
   double z0;

   /// @a z coordinate of the end of the line segment.
   double z1;

   Line ()
   {
      attenuate = true;
      module = new ModuleBase(1);
      x0 = 0.0;
      x1 = 1.0;
      y0 = 0.0;
      y1 = 1.0;
      z0 = 0.0;
      z1 = 1.0;
   }

   Line (ModuleBase module)
   {
      attenuate = true;
      this.module = module;
      x0 = 0.0;
      x1 = 1.0;
      y0 = 0.0;
      y1 = 1.0;
      z0 = 0.0;
      z1 = 1.0
   }

   /// Returns the output value from the noise module given the
   /// one-dimensional coordinate of the specified input value located
   /// on the line segment.
   ///
   /// @param p The distance along the line segment (ranges from 0.0
   /// to 1.0)
   ///
   /// @returns The output value from the noise module.
   ///
   /// @pre A noise module was passed to the setModule() method.
   /// @pre The start and end points of the line segment were specified.
   ///
   /// The output value is generated by the noise module passed to the
   /// setModule() method.  This value may be attenuated (moved toward
   /// 0.0) as @a p approaches either end of the line segment; this is
   /// the default behavior.
   ///
   /// If the value is not to be attenuated, @a p can safely range
   /// outside the 0.0 to 1.0 range; the output value will be
   /// extrapolated along the line that this segment is part of.
   public double getValue (double p)
   {
      assert (module != null);

      double x = (x1 - x0) * p + x0;
      double y = (y1 - y0) * p + y0;
      double z = (z1 - z0) * p + z0;
      double value = module.getValue (x, y, z);

      if (attenuate)
         return p * (1.0 - p) * 4 * value;
      else
         return value;
   }

   /// Returns a flag indicating whether the output value is to be
   /// attenuated (moved toward 0.0) as the ends of the line segment are
   /// approached by the input value.
   ///
   /// @returns
   /// - @a true if the value is to be attenuated
   /// - @a false if not.
   public boolean getAttenuate ()
   {
      return attenuate;
   }

   /// 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 ModuleBase getModule ()
   {
      assert (module != null);
      return module;
   }

   /// Sets a flag indicating that the output value is to be attenuated
   /// (moved toward 0.0) as the ends of the line segment are approached.
   ///
   /// @param att A flag that specifies whether the output value is to be
   /// attenuated.
   public void setAttenuate (boolean att)
   {
      attenuate = att;
   }

   /// Sets the position ( @a x, @a y, @a z ) of the end of the line
   /// segment to choose values along.
   ///
   /// @param x x coordinate of the end position.
   /// @param y y coordinate of the end position.
   /// @param z z coordinate of the end position.
   public void setEndPoint (double x, double y, double z)
   {
      x1 = x;
      y1 = y;
      z1 = z;
   }

   /// 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 (ModuleBase module)
   {
      this.module = module;
   }

   /// Sets the position ( @a x, @a y, @a z ) of the start of the line
   /// segment to choose values along.
   ///
   /// @param x x coordinate of the start position.
   /// @param y y coordinate of the start position.
   /// @param z z coordinate of the start position.
   public void setStartPoint (double x, double y, double z)
   {
      x0 = x;
      y0 = y;
      z0 = z;
   }

   public double getX0()
   {
      return x0;
   }

   public double getX1()
   {
      return x1;
   }

   public double getY0()
   {
      return y0;
   }

   public double getY1()
   {
      return y1;
   }

   public double getZ0()
   {
      return z0;
   }

   public double getZ1()
   {
      return z1;
   }

   public void setX0(double x0)
   {
      this.x0 = x0;
   }

   public void setX1(double x1)
   {
      this.x1 = x1;
   }

   public void setY0(double y0)
   {
      this.y0 = y0;
   }

   public void setY1(double y1)
   {
      this.y1 = y1;
   }

   public void setZ0(double z0)
   {
      this.z0 = z0;
   }

   public void setZ1(double z1)
   {
      this.z1 = z1;
   }

}
TOP

Related Classes of libnoiseforjava.model.Line

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.