gov.nist.microanalysis.NISTMonte
Class SumShape

java.lang.Object
  extended by gov.nist.microanalysis.NISTMonte.SumShape
All Implemented Interfaces:
ITransform, MonteCarloSS.Shape, TrajectoryVRML.IRender

public class SumShape
extends java.lang.Object
implements MonteCarloSS.Shape, ITransform, TrajectoryVRML.IRender

An implementation of the Shape interface for the union of the volume encompassed by multiple Shape instances. While the constituent Shape instances need not strictly overlap, there is little reason to use this class if they don't. When a trajectory exits a Shape, the trajectory is assumed to return to the Shape's parent Shape. This leads to incorrect default behavior if two child Shape instances overlap. To handle this situation, use the MCSS_SumShape to represent the overlapping child Shapes as a single Shape. The trajectory will remain inside the MCSS_SumShape until it exits all the Shapes that define the MCSS_SumShape.
Note: MCSS_SumShape is not particularly efficient.

Copyright: Pursuant to title 17 Section 105 of the United States Code this software is not subject to copyright protection and is in the public domain

Company: National Institute of Standards and Technology

Version:
1.0
Author:
Nicholas W. M. Ritchie

Constructor Summary
SumShape(MonteCarloSS.Shape[] shapes)
          MCSS_SumShape - Creates a sum shape that represents the sum of an array of Shapes.
SumShape(MonteCarloSS.Shape a, MonteCarloSS.Shape b)
          MCSS_SumShape - Create a sum shape that represents the sum of two shapes.
 
Method Summary
 boolean contains(double[] pos)
          contains - See MonteCarloSS.Shape.contains
 double getFirstIntersection(double[] pos0, double[] pos1)
          getFirstIntersection - See MonteCarloSS.Shape.getFirstItersection
 void render(TrajectoryVRML.RenderContext rc, java.io.Writer wr)
          Render the SumShape by rendering each of the sub-Shapes.
 void rotate(double[] pivot, double phi, double theta, double psi)
          rotate - Rotate the object around the specified point by phi about the z-axis followed by theta round the y-axis followed by psi around the z-axis.
 void translate(double[] distance)
          translate - Translate this object by the distance specified.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SumShape

public SumShape(MonteCarloSS.Shape a,
                MonteCarloSS.Shape b)
MCSS_SumShape - Create a sum shape that represents the sum of two shapes.

Parameters:
a - Shape
b - Shape

SumShape

public SumShape(MonteCarloSS.Shape[] shapes)
MCSS_SumShape - Creates a sum shape that represents the sum of an array of Shapes.

Parameters:
shapes - Shape[]
Method Detail

contains

public boolean contains(double[] pos)
contains - See MonteCarloSS.Shape.contains

Specified by:
contains in interface MonteCarloSS.Shape
Parameters:
pos - double[]
Returns:
boolean

getFirstIntersection

public double getFirstIntersection(double[] pos0,
                                   double[] pos1)
getFirstIntersection - See MonteCarloSS.Shape.getFirstItersection

Specified by:
getFirstIntersection in interface MonteCarloSS.Shape
Parameters:
pos0 - double[]
pos1 - double[]
Returns:
double

rotate

public void rotate(double[] pivot,
                   double phi,
                   double theta,
                   double psi)
Description copied from interface: ITransform
rotate - Rotate the object around the specified point by phi about the z-axis followed by theta round the y-axis followed by psi around the z-axis. These is the standard Euler angle rotation. The rotation matrix is...
[ cos(phi)*cos(th)*cos(psi)-sin(phi)*sin(psi) -sin(phi)*cos(th)*cos(psi)-cos(phi)*sin(psi) sin(th)*cos(psi) ]
[ sin(phi)*cos(psi)+cos(phi)*cos(th)*sin(psi) -sin(phi)*cos(th)*sin(psi)+cos(phi)*cos(psi) sin(th)*sin(psi) ]
[ -cos(phi)*sin(th) sin(th)*sin(phi) cos(th) ]

Specified by:
rotate in interface ITransform
Parameters:
pivot - double[] - a three-vector specifying the point around which the rotation is performed
phi - double
theta - double
psi - double

translate

public void translate(double[] distance)
Description copied from interface: ITransform
translate - Translate this object by the distance specified.

Specified by:
translate in interface ITransform
Parameters:
distance - double[] - A three-vector specifying how much to translate

render

public void render(TrajectoryVRML.RenderContext rc,
                   java.io.Writer wr)
            throws java.io.IOException
Render the SumShape by rendering each of the sub-Shapes. If a sub-Shape does not implement the interface TrajectoryVRML.IRender then it will be missing from the rendered VRML world.

Specified by:
render in interface TrajectoryVRML.IRender
Parameters:
rc -
wr -
Throws:
java.io.IOException
See Also:
TrajectoryVRML.IRender.render(gov.nist.microanalysis.NISTMonte.TrajectoryVRML.RenderContext, java.io.Writer)