package edu.stanford.rsl.conrad.geometry.motion; import java.util.ArrayList; import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND; import edu.stanford.rsl.conrad.geometry.splines.SurfaceBSpline; import edu.stanford.rsl.conrad.geometry.splines.TimeVariantSurfaceBSpline; import edu.stanford.rsl.conrad.utils.TessellationUtil; public class MixedSurfaceBSplineMotionField extends ParzenWindowMotionField { /** * */ private static final long serialVersionUID = -4288495612235276488L; public MixedSurfaceBSplineMotionField(ArrayList<TimeVariantSurfaceBSpline> variants, ArrayList<SurfaceBSpline> invariants, double sigma) { super(sigma); this.invariants = invariants; this.variants = variants; } private ArrayList<TimeVariantSurfaceBSpline> variants; private ArrayList<SurfaceBSpline> invariants; @Override PointND[] getRasterPoints(double time) { PointND[] result = timePointMap.get(time); if (result == null){ ArrayList<PointND[]> allPoints= new ArrayList<PointND[]>(); int sizes = 0; for(int i=0; i< variants.size(); i++){ PointND [] current = variants.get(i).getRasterPoints(TessellationUtil.getSamplingU(variants.get(i)), TessellationUtil.getSamplingV(variants.get(i)), time); allPoints.add(current); sizes += current.length; } for(int i=0; i< invariants.size(); i++){ PointND [] current = invariants.get(i).getRasterPoints(TessellationUtil.getSamplingU(invariants.get(i)), TessellationUtil.getSamplingV(invariants.get(i))); allPoints.add(current); sizes += current.length; } result = new PointND[sizes]; sizes = 0; for(int i=0; i< allPoints.size(); i++){ PointND[] current = allPoints.get(i); for (int j=0;j<current.length;j++){ result[j+sizes] = current[j]; } sizes += current.length; } timePointMap.put(time, result); } return result; } /** * @param invariants the invariants to set */ public void setInvariants(ArrayList<SurfaceBSpline> invariants) { this.invariants = invariants; } /** * @return the invariants */ public ArrayList<SurfaceBSpline> getInvariants() { return invariants; } /** * @param variants the variants to set */ public void setVariants(ArrayList<TimeVariantSurfaceBSpline> variants) { this.variants = variants; } /** * @return the variants */ public ArrayList<TimeVariantSurfaceBSpline> getVariants() { return variants; } } /* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */