gpt4 book ai didi

gov.nasa.worldwind.util.WWMath.clamp()方法的使用及代码示例

转载 作者:知者 更新时间:2024-03-23 01:51:05 30 4
gpt4 key购买 nike

本文整理了Java中gov.nasa.worldwind.util.WWMath.clamp()方法的一些代码示例,展示了WWMath.clamp()的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。WWMath.clamp()方法的具体详情如下:
包路径:gov.nasa.worldwind.util.WWMath
类名称:WWMath
方法名:clamp

WWMath.clamp介绍

[英]Restricts a value to the range [min, max] degrees, clamping values outside the range. Values less than min are returned as min, and values greater than max are returned as max. Values within the range are returned unmodified.

The result of this method is undefined if min is greater than max.
[中]将值限制在[min,max]度范围内,夹紧值超出范围。小于最小值的值作为最小值返回,大于最大值的值作为最大值返回。范围内的值未经修改返回。
如果最小值大于最大值,则此方法的结果未定义。

代码示例

代码示例来源:origin: Berico-Technologies/Geo-Coordinate-Conversion-Java

/**
 * Returns the interpolation factor for <code>v</code> given the specified range <code>[x, y]</code>. The
 * interpolation factor is a number between 0 and 1 (inclusive), representing the value's relative position between
 * <code>x</code> and <code>y</code>. For example, 0 corresponds to <code>x</code>, 1 corresponds to <code>y</code>,
 * and anything in between corresponds to a linear combination of <code>x</code> and <code>y</code>.
 *
 * @param v the value to compute the interpolation factor for.
 * @param x the first value.
 * @param y the second value.
 *
 * @return the interpolation factor for <code>v</code> given the specified range <code>[x, y]</code>
 */
public static double computeInterpolationFactor(double v, double x, double y)
{
  return clamp((v - x) / (y - x), 0d, 1d);
}

代码示例来源:origin: Berico-Technologies/Geo-Coordinate-Conversion-Java

/**
 * Returns the linear interpolation of <code>x</code> and <code>y</code> according to the function: <code>(1 - a) *
 * x + a * y</code>. The interpolation factor <code>a</code> defines the weight given to each value, and is clamped
 * to the range [0, 1]. If <code>a</code> is 0 or less, this returns x. If <code>a</code> is 1 or more, this returns
 * <code>y</code>. Otherwise, this returns the linear interpolation of <code>x</code> and <code>y</code>. For
 * example, when <code>a</code> is <code>0.5</code> this returns <code>(x + y)/2</code>.
 *
 * @param a the interpolation factor.
 * @param x the first value.
 * @param y the second value.
 *
 * @return the linear interpolation of <code>x</code> and <code>y</code>.
 */
public static double mix(double a, double x, double y)
{
  double t = clamp(a, 0d, 1d);
  return x + t * (y - x);
}

代码示例来源:origin: Berico-Technologies/Geo-Coordinate-Conversion-Java

/**
 * Returns the smooth hermite interpolation of <code>x</code> and <code>y</code> according to the function: <code>(1
 * - t) * x + t * y</code>, where <code>t = a * a * (3 - 2 * a)</code>. The interpolation factor <code>a</code>
 * defines the weight given to each value, and is clamped to the range [0, 1]. If <code>a</code> is 0 or less, this
 * returns <code>x</code>. If <code>a</code> is 1 or more, this returns <code>y</code>. Otherwise, this returns the
 * smooth hermite interpolation of <code>x</code> and <code>y</code>. Like the linear function {@link #mix(double,
 * double, double)}, when <code>a</code> is <code>0.5</code> this returns <code>(x + y)/2</code>. But unlike the
 * linear function, the hermite function's slope gradually increases when <code>a</code> is near 0, then gradually
 * decreases when <code>a</code> is near 1. This is a useful property where a more gradual transition from
 * <code>x</code> to <code>y</code> is desired.
 *
 * @param a the interpolation factor.
 * @param x the first value.
 * @param y the second value.
 *
 * @return the smooth hermite interpolation of <code>x</code> and <code>y</code>.
 */
public static double mixSmooth(double a, double x, double y)
{
  double t = clamp(a, 0d, 1d);
  t = t * t * (3d - 2d * t);
  return x + t * (y - x);
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

protected void applyLimits(LookAt lookAt) {
  double distanceToExtents = this.wwd.distanceToViewGlobeExtents();
  double minRange = 10;
  double maxRange = distanceToExtents * 2;
  lookAt.range = WWMath.clamp(lookAt.range, minRange, maxRange);
  //double minTiltRange = distanceToExtents * 0.1;
  //double maxTiltRange = distanceToExtents * 0.9;
  //double tiltAmount = WWMath.clamp((lookAt.range - minTiltRange) / (maxTiltRange - minTiltRange), 0, 1);
  double maxTilt = 80;
  lookAt.tilt = WWMath.clamp(lookAt.tilt, 0, maxTilt);
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

protected void applyLimits(Camera camera) {
    double distanceToExtents = this.wwd.distanceToViewGlobeExtents();
    double minAltitude = 100;
    double maxAltitude = distanceToExtents;
    camera.altitude = WWMath.clamp(camera.altitude, minAltitude, maxAltitude);
    // Limit the tilt to between nadir and the horizon (roughly)
    double r = wwd.getGlobe().getRadiusAt(camera.latitude, camera.latitude);
    double maxTilt = Math.toDegrees(Math.asin(r / (r + camera.altitude)));
    double minTilt = 0;
    camera.tilt = WWMath.clamp(camera.tilt, minTilt, maxTilt);
  }
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

protected double cameraDistanceGeographic(RenderContext rc, Sector boundingSector) {
  double lat = WWMath.clamp(rc.camera.latitude, boundingSector.minLatitude(), boundingSector.maxLatitude());
  double lon = WWMath.clamp(rc.camera.longitude, boundingSector.minLongitude(), boundingSector.maxLongitude());
  Vec3 point = rc.geographicToCartesian(lat, lon, 0, WorldWind.CLAMP_TO_GROUND, this.scratchPoint);
  return point.distanceTo(rc.cameraPoint);
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

double uMin = Math.floor(rasterWidth * sMin);
double uMax = Math.ceil(rasterWidth * sMax);
int iMin = (int) WWMath.clamp(uMin, 0, rasterWidth - 1);
int iMax = (int) WWMath.clamp(uMax, 0, rasterWidth - 1);
double vMin = Math.floor(rasterHeight * tMin);
double vMax = Math.ceil(rasterHeight * tMax);
int jMin = (int) WWMath.clamp(vMin, 0, rasterHeight - 1);
int jMax = (int) WWMath.clamp(vMax, 0, rasterHeight - 1);
  int rowjMin = row * tileHeight;
  int rowjMax = rowjMin + tileHeight - 1;
  int j0 = (int) WWMath.clamp(jMin, rowjMin, rowjMax) % tileHeight;
  int j1 = (int) WWMath.clamp(jMax, rowjMin, rowjMax) % tileHeight;
    int coliMin = col * tileWidth;
    int coliMax = coliMin + tileWidth - 1;
    int i0 = (int) WWMath.clamp(iMin, coliMin, coliMax) % tileWidth;
    int i1 = (int) WWMath.clamp(iMax, coliMin, coliMax) % tileWidth;

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

double uMin = Math.floor(rasterWidth * sMin);
double uMax = Math.ceil(rasterWidth * sMax);
int iMin = (int) WWMath.clamp(uMin, 0, rasterWidth - 1);
int iMax = (int) WWMath.clamp(uMax, 0, rasterWidth - 1);
int colMin = iMin / tileWidth;
int colMax = iMax / tileWidth;
double vMin = Math.floor(rasterHeight * tMin);
double vMax = Math.ceil(rasterHeight * tMax);
int jMin = (int) WWMath.clamp(vMin, 0, rasterHeight - 1);
int jMax = (int) WWMath.clamp(vMax, 0, rasterHeight - 1);
int rowMin = jMin / tileHeight;
int rowMax = jMax / tileHeight;

代码示例来源:origin: Berico-Technologies/Geo-Coordinate-Conversion-Java

/**
 * Returns the an interpolated location along the rhumb line between <code>value1</code> and <code>value2</code>.
 * The interpolation factor <code>amount</code> defines the weight given to each value, and is clamped to the range
 * [0, 1]. If <code>a</code> is 0 or less, this returns <code>value1</code>. If <code>amount</code> is 1 or more,
 * this returns <code>value2</code>. Otherwise, this returns the location on the rhumb line between
 * <code>value1</code> and <code>value2</code> corresponding to the specified interpolation factor.
 *
 * @param amount the interpolation factor
 * @param value1 the first location.
 * @param value2 the second location.
 *
 * @return an interpolated location along the rhumb line between <code>value1</code> and <code>value2</code>
 *
 * @throws IllegalArgumentException if either location is null.
 */
public static LatLon interpolateRhumb(double amount, LatLon value1, LatLon value2)
{
  if (value1 == null || value2 == null)
  {
    throw new IllegalArgumentException("Lat Lon Is Null");
  }
  if (LatLon.equals(value1, value2))
    return value1;
  double t = WWMath.clamp(amount, 0d, 1d);
  Angle azimuth = LatLon.rhumbAzimuth(value1, value2);
  Angle distance = LatLon.rhumbDistance(value1, value2);
  Angle pathLength = Angle.fromDegrees(t * distance.degrees);
  return LatLon.rhumbEndPosition(value1, azimuth, pathLength);
}

代码示例来源:origin: Berico-Technologies/Geo-Coordinate-Conversion-Java

/**
 * Returns the an interpolated location along the great-arc between <code>value1</code> and <code>value2</code>. The
 * interpolation factor <code>amount</code> defines the weight given to each value, and is clamped to the range [0,
 * 1]. If <code>a</code> is 0 or less, this returns <code>value1</code>. If <code>amount</code> is 1 or more, this
 * returns <code>value2</code>. Otherwise, this returns the location on the great-arc between <code>value1</code>
 * and <code>value2</code> corresponding to the specified interpolation factor.
 *
 * @param amount the interpolation factor
 * @param value1 the first location.
 * @param value2 the second location.
 *
 * @return an interpolated location along the great-arc between <code>value1</code> and <code>value2</code>.
 *
 * @throws IllegalArgumentException if either location is null.
 */
public static LatLon interpolateGreatCircle(double amount, LatLon value1, LatLon value2)
{
  if (value1 == null || value2 == null)
  {
    throw new IllegalArgumentException("Lat Lon Is Null");
  }
  if (LatLon.equals(value1, value2))
    return value1;
  double t = WWMath.clamp(amount, 0d, 1d);
  Angle azimuth = LatLon.greatCircleAzimuth(value1, value2);
  Angle distance = LatLon.greatCircleDistance(value1, value2);
  Angle pathLength = Angle.fromDegrees(t * distance.degrees);
  return LatLon.greatCircleEndPosition(value1, azimuth, pathLength);
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

double v = rasterHeight * WWMath.clamp(t, tMin, tMax); // clamp the vertical coordinate to the raster edge
float b = (float) WWMath.fract(v - 0.5);
int j0 = (int) WWMath.clamp(Math.floor(v - 0.5), 0, rasterHeight - 1);
int j1 = (int) WWMath.clamp(j0 + 1, 0, rasterHeight - 1);
int row0 = j0 / tileHeight;
int row1 = j1 / tileHeight;
    i1 = WWMath.mod((i0 + 1), rasterWidth);
  } else {
    u = rasterWidth * WWMath.clamp(s, sMin, sMax); // clamp the horizontal coordinate
    i0 = (int) WWMath.clamp((int) Math.floor(u - 0.5), 0, rasterWidth - 1);
    i1 = (int) WWMath.clamp((i0 + 1), 0, rasterWidth - 1);

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

/**
   * Calculates the distance from this tile to the camera point associated with the specified render context.
   *
   * @param rc the render context which provides the current camera point
   *
   * @return the distance in meters
   */
  protected double distanceToCamera(RenderContext rc) {
    // determine the nearest latitude
    double nearestLat = WWMath.clamp(rc.camera.latitude, this.sector.minLatitude(), this.sector.maxLatitude());
    // determine the nearest longitude and account for the antimeridian discontinuity
    double nearestLon;
    double lonDifference = rc.camera.longitude - this.sector.centroidLongitude();
    if (lonDifference < -180.0) {
      nearestLon = this.sector.maxLongitude();
    } else if (lonDifference > 180.0) {
      nearestLon = this.sector.minLongitude();
    } else {
      nearestLon = WWMath.clamp(rc.camera.longitude, this.sector.minLongitude(), this.sector.maxLongitude());
    }

    float minHeight = (float) (this.heightLimits[0] * rc.verticalExaggeration);
    rc.geographicToCartesian(nearestLat, nearestLon, minHeight, WorldWind.ABSOLUTE, this.nearestPoint);

    return rc.cameraPoint.distanceTo(this.nearestPoint);
  }
}

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

i1 = WWMath.mod((i0 + 1), rasterWidth);
} else {
  u = rasterWidth * WWMath.clamp(s, sMin, sMax); // clamp the horizontal coordinate
  i0 = (int) WWMath.clamp((int) Math.floor(u - 0.5), 0, rasterWidth - 1);
  i1 = (int) WWMath.clamp((i0 + 1), 0, rasterWidth - 1);
double v = rasterHeight * WWMath.clamp(t, tMin, tMax); // clamp the vertical coordinate to the raster edge
int j0 = (int) WWMath.clamp(Math.floor(v - 0.5), 0, rasterHeight - 1);
int j1 = (int) WWMath.clamp(j0 + 1, 0, rasterHeight - 1);
int row0 = j0 / tileHeight;
int row1 = j1 / tileHeight;

代码示例来源:origin: NASAWorldWind/WorldWindAndroid

protected void makeDrawable(RenderContext rc) {
    // Obtain a pooled drawable and configure it to draw the sightline's coverage.
    Pool<DrawableSightline> pool = rc.getDrawablePool(DrawableSightline.class);
    DrawableSightline drawable = DrawableSightline.obtain(pool);

    // Compute the transform from sightline local coordinates to world coordinates.
    drawable.centerTransform = rc.globe.cartesianToLocalTransform(this.centerPoint.x, this.centerPoint.y, this.centerPoint.z, drawable.centerTransform);
    drawable.range = (float) WWMath.clamp(this.range, 0, Float.MAX_VALUE);

    // Configure the drawable colors according to the current attributes. When picking use a unique color associated
    // with the picked object ID. Null attributes indicate that nothing is drawn.
    if (this.activeAttributes != null) {
      drawable.visibleColor.set(rc.pickMode ? this.pickColor : this.activeAttributes.interiorColor);
    }
    if (this.occludeAttributes != null) {
      drawable.occludedColor.set(rc.pickMode ? this.pickColor : this.occludeAttributes.interiorColor);
    }

    // Use the sightline GLSL program to draw the coverage.
    drawable.program = (SightlineProgram) rc.getShaderProgram(SightlineProgram.KEY);
    if (drawable.program == null) {
      drawable.program = (SightlineProgram) rc.putShaderProgram(SightlineProgram.KEY, new SightlineProgram(rc.resources));
    }

    // Enqueue a drawable for processing on the OpenGL thread.
    rc.offerSurfaceDrawable(drawable, 0 /*z-order*/);
  }
}

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com