?? projmath.java
字號:
// **********************************************************************// // <copyright>// // BBN Technologies// 10 Moulton Street// Cambridge, MA 02138// (617) 873-8000// // Copyright (C) BBNT Solutions LLC. All rights reserved.// // </copyright>// **********************************************************************// // $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/proj/ProjMath.java,v $// $RCSfile: ProjMath.java,v $// $Revision: 1.3.2.2 $// $Date: 2005/02/11 22:51:27 $// $Author: dietrick $// // **********************************************************************package com.bbn.openmap.proj;import com.bbn.openmap.MoreMath;/** * Math functions used by projection code. */public final class ProjMath { /** * North pole latitude in radians. */ public final static transient float NORTH_POLE_F = MoreMath.HALF_PI; /** * South pole latitude in radians. */ public final static transient float SOUTH_POLE_F = -NORTH_POLE_F; /** * North pole latitude in radians. */ public final static transient double NORTH_POLE_D = MoreMath.HALF_PI_D; /** * South pole latitude in radians. */ public final static transient double SOUTH_POLE_D = -NORTH_POLE_D; /** * Dateline longitude in radians. */ public final static transient float DATELINE_F = (float) Math.PI; /** * Dateline longitude in radians. */ public final static transient double DATELINE_D = Math.PI; /** * Longitude range in radians. */ public final static transient float LON_RANGE_F = (float) MoreMath.TWO_PI; /** * Longitude range in radians. */ public final static transient double LON_RANGE_D = MoreMath.TWO_PI_D; // cannot construct private ProjMath() {} /** * rounds the quantity away from 0. * * @param x in value * @return double * @see #qint(double) */ public final static double roundAdjust(double x) { return qint_old(x); } /** * Rounds the quantity away from 0. * * @param x value * @return double */ public final static double qint(double x) { return qint_new(x); } final private static double qint_old(double x) { return (((int) x) < 0) ? (x - 0.5) : (x + 0.5); } final private static double qint_new(double x) { // -1 or +1 away from zero return (x <= 0.0) ? (x - 1.0) : (x + 1.0); } /** * Calculate the shortest arc distance between two lons. * * @param lon1 radians * @param lon2 radians * @return float distance */ public final static float lonDistance(float lon1, float lon2) { return (float) Math.min(Math.abs(lon1 - lon2), ((lon1 < 0) ? lon1 + Math.PI : Math.PI - lon1) + ((lon2 < 0) ? lon2 + Math.PI : Math.PI - lon2)); } /** * Convert between decimal degrees and scoords. * * @param deg degrees * @return long scoords * */ public final static long DEG_TO_SC(double deg) { return (long) (deg * 3600000); } /** * Convert between decimal degrees and scoords. * * @param sc scoords * @return double decimal degrees */ public final static double SC_TO_DEG(int sc) { return ((double) (sc) / (60.0 * 60.0 * 1000.0)); } /** * Convert radians to degrees. * * @param rad radians * @return double decimal degrees */ public final static double radToDeg(double rad) { return (rad * (180.0d / Math.PI)); } /** * Convert radians to degrees. * * @param rad radians * @return float decimal degrees */ public final static float radToDeg(float rad) { return (float) radToDeg((double)rad); } /** * Convert degrees to radians. * * @param deg degrees * @return double radians */ public final static double degToRad(double deg) { return (deg * (Math.PI / 180.0d)); } /** * Convert degrees to radians. * * @param deg degrees * @return float radians */ public final static float degToRad(float deg) { return (float) degToRad((double)deg); } /** * Generate a hashCode value for a lat/lon pair. * * @param lat latitude * @param lon longitude * @return int hashcode * */ public final static int hashLatLon(float lat, float lon) { if (lat == -0f) lat = 0f;//handle negative zero (anything else?) if (lon == -0f) lon = 0f; int tmp = Float.floatToIntBits(lat); int hash = (tmp << 5) | (tmp >> 27);//rotate the lat bits return hash ^ Float.floatToIntBits(lon);//XOR with lon } /** * Converts an array of decimal degrees float lat/lons to float * radians in place. * * @param degs float[] lat/lons in decimal degrees * @return float[] lat/lons in radians */ public final static float[] arrayDegToRad(float[] degs) { for (int i = 0; i < degs.length; i++) { degs[i] = degToRad(degs[i]); } return degs; } /** * Converts an array of radian float lat/lons to decimal degrees * in place. * * @param rads float[] lat/lons in radians * @return float[] lat/lons in decimal degrees */ public final static float[] arrayRadToDeg(float[] rads) { for (int i = 0; i < rads.length; i++) { rads[i] = radToDeg(rads[i]); } return rads; } /** * Converts an array of decimal degrees double lat/lons to double * radians in place. * * @param degs double[] lat/lons in decimal degrees * @return double[] lat/lons in radians */ public final static double[] arrayDegToRad(double[] degs) { for (int i = 0; i < degs.length; i++) { degs[i] = degToRad(degs[i]); } return degs; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -