package edu.stanford.rsl.conrad.geometry.motion; import edu.stanford.rsl.conrad.geometry.bounds.HalfSpaceBoundingCondition; import edu.stanford.rsl.conrad.geometry.shapes.simple.Plane3D; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; public class DualMotionField extends SimpleMotionField { /** * */ private static final long serialVersionUID = -202437787576272143L; protected HalfSpaceBoundingCondition halfSpaceOne; protected MotionField one; protected MotionField two; public DualMotionField (HalfSpaceBoundingCondition halfSpaceOne, MotionField one, MotionField two){ this.one = one; this.two = two; this.halfSpaceOne = halfSpaceOne; } @Override public PointND getPosition(PointND initialPosition, double initialTime, double time) { HalfSpaceBoundingCondition currentHS = new HalfSpaceBoundingCondition(new Plane3D(one.getPosition(halfSpaceOne.getBoundingSurface().getPoint(), 0, initialTime), halfSpaceOne.getBoundingSurface().getNormal())); if (currentHS.isSatisfiedBy(initialPosition)){ return one.getPosition(initialPosition, initialTime, time); } else { return two.getPosition(initialPosition, initialTime, time); } } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */