scheduledorbitviewstateiterator.java

来自「world wind java sdk 源码」· Java 代码 · 共 473 行 · 第 1/2 页

JAVA
473
字号
/* Copyright (C) 2001, 2006 United States Government as represented bythe Administrator of the National Aeronautics and Space Administration.All Rights Reserved.*/package gov.nasa.worldwind.view;import gov.nasa.worldwind.geom.*;import gov.nasa.worldwind.util.Logging;/** * @author dcollins * @version $Id: ScheduledOrbitViewStateIterator.java 4100 2008-01-08 02:49:54Z dcollins $ */public class ScheduledOrbitViewStateIterator extends BasicOrbitViewStateIterator{    private final int maxSmoothing;    protected ScheduledOrbitViewStateIterator(long lengthMillis, OrbitViewAnimator animator, boolean doSmoothing)    {        this(new ScheduledOrbitViewInterpolator(lengthMillis), animator, doSmoothing);    }    protected ScheduledOrbitViewStateIterator(ScheduledOrbitViewInterpolator interpolator, OrbitViewAnimator animator,        boolean doSmoothing)    {        super(false, interpolator, animator);        if (interpolator == null)        {            String message = Logging.getMessage("nullValue.OrbitViewInterpolatorIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        if (animator == null)        {            String message = Logging.getMessage("nullValue.OrbitViewAnimatorIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        this.maxSmoothing = maxSmoothingFromFlag(doSmoothing);    }    public final boolean isSmoothing()    {        return this.maxSmoothing != 0;    }    public void doNextState(double interpolant, OrbitView orbitView)    {        if (orbitView == null)        {            String message = Logging.getMessage("nullValue.OrbitViewIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        double smoothedInterpolant = interpolantSmoothed(interpolant, this.maxSmoothing);        super.doNextState(smoothedInterpolant, orbitView);    }    private static double interpolantSmoothed(double interpolant, int smoothingIterations)    {        // Apply iterative hermite smoothing.        double smoothed = interpolant;        for (int i = 0; i < smoothingIterations; i++)        {            smoothed = smoothed * smoothed * (3.0 - 2.0 * smoothed);        }        return smoothed;    }    private static int maxSmoothingFromFlag(boolean doSmoothing)    {        if (doSmoothing)            return 1;        else            return 0;    }        // ============== Factory Functions ======================= //    // ============== Factory Functions ======================= //    // ============== Factory Functions ======================= //    public static ScheduledOrbitViewStateIterator createCenterIterator(        Position begin, Position end)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.PositionIsNull");            Logging.logger().fine(message);            throw new IllegalArgumentException(message);        }        // TODO: length-scaling factory function        final long DEFAULT_LENGTH_MILLIS = 4000;        boolean smoothed = true;        return createCenterIterator(            begin, end,            DEFAULT_LENGTH_MILLIS, smoothed);    }    public static ScheduledOrbitViewStateIterator createCenterIterator(        Position begin, Position end,        long lengthMillis, boolean smoothed)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.PositionIsNull");            Logging.logger().fine(message);            throw new IllegalArgumentException(message);        }        if (lengthMillis < 0)        {            String message = Logging.getMessage("generic.ArgumentOutOfRange");            Logging.logger().fine(message);            throw new IllegalArgumentException(message);        }        OrbitViewPropertyAccessor.PositionAccessor propertyAccessor            = OrbitViewPropertyAccessor.createCenterPositionAccessor();        OrbitViewAnimator animator = new BasicOrbitViewAnimator.PositionAnimator(begin, end, propertyAccessor);        return new ScheduledOrbitViewStateIterator(lengthMillis, animator, smoothed);    }    public static ScheduledOrbitViewStateIterator createHeadingIterator(        Angle begin, Angle end)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.AngleIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        final long MIN_LENGTH_MILLIS = 500;        final long MAX_LENGTH_MILLIS = 3000;        long lengthMillis = getScaledLengthMillis(            begin, end, Angle.POS180,            MIN_LENGTH_MILLIS, MAX_LENGTH_MILLIS);        boolean smoothed = true;        return createHeadingIterator(            begin,            end,            lengthMillis, smoothed);    }    public static ScheduledOrbitViewStateIterator createHeadingIterator(        Angle begin, Angle end,        long lengthMillis, boolean smoothed)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.AngleIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        if (lengthMillis < 0)        {            String message = Logging.getMessage("generic.ArgumentOutOfRange", lengthMillis);            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        OrbitViewPropertyAccessor.AngleAccessor propertyAccessor = OrbitViewPropertyAccessor.createHeadingAccessor();        OrbitViewAnimator animator = new BasicOrbitViewAnimator.AngleAnimator(begin, end, propertyAccessor);        return new ScheduledOrbitViewStateIterator(lengthMillis, animator, smoothed);    }    public static ScheduledOrbitViewStateIterator createPitchIterator(        Angle begin, Angle end)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.AngleIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        final long MIN_LENGTH_MILLIS = 500;        final long MAX_LENGTH_MILLIS = 1500;        long lengthMillis = getScaledLengthMillis(            begin, end, Angle.POS90,            MIN_LENGTH_MILLIS, MAX_LENGTH_MILLIS);        boolean smoothed = true;        return createPitchIterator(            begin,            end,            lengthMillis, smoothed);    }    public static ScheduledOrbitViewStateIterator createPitchIterator(        Angle begin, Angle end,        long lengthMillis, boolean smoothed)    {        if (begin == null || end == null)        {            String message = Logging.getMessage("nullValue.AngleIsNull");            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        if (lengthMillis < 0)        {            String message = Logging.getMessage("generic.ArgumentOutOfRange", lengthMillis);            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        OrbitViewPropertyAccessor.AngleAccessor propertyAccessor = OrbitViewPropertyAccessor.createPitchAccessor();        OrbitViewAnimator animator = new BasicOrbitViewAnimator.AngleAnimator(begin, end, propertyAccessor);        return new ScheduledOrbitViewStateIterator(lengthMillis, animator, smoothed);    }    public static ScheduledOrbitViewStateIterator createZoomIterator(        double begin, double end)    {        // TODO: length-scaling factory function        final long DEFAULT_LENGTH_MILLIS = 4000;        boolean smoothed = true;        return createZoomIterator(            begin, end,            DEFAULT_LENGTH_MILLIS, smoothed);    }    public static ScheduledOrbitViewStateIterator createZoomIterator(        double begin, double end,        long lengthMillis, boolean smoothed)    {        if (lengthMillis < 0)        {            String message = Logging.getMessage("generic.ArgumentOutOfRange", lengthMillis);            Logging.logger().severe(message);            throw new IllegalArgumentException(message);        }        OrbitViewPropertyAccessor.DoubleAccessor propertyAccessor = OrbitViewPropertyAccessor.createZoomAccessor();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?