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 + -
显示快捷键?