001// Copyright (c) FIRST and other WPILib contributors. 002// Open Source Software; you can modify and/or share it under the terms of 003// the WPILib BSD license file in the root directory of this project. 004 005package edu.wpi.first.math.util; 006 007/** Utility class that converts between commonly used units in FRC. */ 008public final class Units { 009 private static final double kInchesPerFoot = 12.0; 010 private static final double kMetersPerInch = 0.0254; 011 private static final double kMetersPerMile = 1609.344; 012 private static final double kSecondsPerMinute = 60; 013 private static final double kMinutesPerHour = 60; 014 private static final double kMillisecondsPerSecond = 1000; 015 private static final double kKilogramsPerLb = 0.453592; 016 017 /** Utility class, so constructor is private. */ 018 private Units() { 019 throw new UnsupportedOperationException("This is a utility class!"); 020 } 021 022 /** 023 * Converts given meters to feet. 024 * 025 * @param meters The meters to convert to feet. 026 * @return Feet converted from meters. 027 */ 028 public static double metersToFeet(double meters) { 029 return metersToInches(meters) / kInchesPerFoot; 030 } 031 032 /** 033 * Converts given feet to meters. 034 * 035 * @param feet The feet to convert to meters. 036 * @return Meters converted from feet. 037 */ 038 public static double feetToMeters(double feet) { 039 return inchesToMeters(feet * kInchesPerFoot); 040 } 041 042 /** 043 * Converts given meters to inches. 044 * 045 * @param meters The meters to convert to inches. 046 * @return Inches converted from meters. 047 */ 048 public static double metersToInches(double meters) { 049 return meters / kMetersPerInch; 050 } 051 052 /** 053 * Converts given inches to meters. 054 * 055 * @param inches The inches to convert to meters. 056 * @return Meters converted from inches. 057 */ 058 public static double inchesToMeters(double inches) { 059 return inches * kMetersPerInch; 060 } 061 062 /** 063 * Converts given degrees to radians. 064 * 065 * @param degrees The degrees to convert to radians. 066 * @return Radians converted from degrees. 067 */ 068 public static double degreesToRadians(double degrees) { 069 return Math.toRadians(degrees); 070 } 071 072 /** 073 * Converts given radians to degrees. 074 * 075 * @param radians The radians to convert to degrees. 076 * @return Degrees converted from radians. 077 */ 078 public static double radiansToDegrees(double radians) { 079 return Math.toDegrees(radians); 080 } 081 082 /** 083 * Converts given radians to rotations. 084 * 085 * @param radians The radians to convert. 086 * @return rotations Converted from radians. 087 */ 088 public static double radiansToRotations(double radians) { 089 return radians / (Math.PI * 2); 090 } 091 092 /** 093 * Converts given degrees to rotations. 094 * 095 * @param degrees The degrees to convert. 096 * @return rotations Converted from degrees. 097 */ 098 public static double degreesToRotations(double degrees) { 099 return degrees / 360; 100 } 101 102 /** 103 * Converts given rotations to degrees. 104 * 105 * @param rotations The rotations to convert. 106 * @return degrees Converted from rotations. 107 */ 108 public static double rotationsToDegrees(double rotations) { 109 return rotations * 360; 110 } 111 112 /** 113 * Converts given rotations to radians. 114 * 115 * @param rotations The rotations to convert. 116 * @return radians Converted from rotations. 117 */ 118 public static double rotationsToRadians(double rotations) { 119 return rotations * 2 * Math.PI; 120 } 121 122 /** 123 * Converts rotations per minute to radians per second. 124 * 125 * @param rpm The rotations per minute to convert to radians per second. 126 * @return Radians per second converted from rotations per minute. 127 */ 128 public static double rotationsPerMinuteToRadiansPerSecond(double rpm) { 129 return rpm * Math.PI / (kSecondsPerMinute / 2); 130 } 131 132 /** 133 * Converts radians per second to rotations per minute. 134 * 135 * @param radiansPerSecond The radians per second to convert to from rotations per minute. 136 * @return Rotations per minute converted from radians per second. 137 */ 138 public static double radiansPerSecondToRotationsPerMinute(double radiansPerSecond) { 139 return radiansPerSecond * (kSecondsPerMinute / 2) / Math.PI; 140 } 141 142 /** 143 * Converts miles per hour to meters per second. 144 * 145 * @param mph The miles per hour to convert to meters per second. 146 * @return Meters per second converted from miles per hour. 147 */ 148 public static double milesPerHourToMetersPerSecond(double mph) { 149 return mph * kMetersPerMile / (kSecondsPerMinute * kMinutesPerHour); 150 } 151 152 /** 153 * Converts meters per second to miles per hour. 154 * 155 * @param metersPerSecond The meters per second to convert to from miles per hour. 156 * @return Miles per hour converted from meters per second. 157 */ 158 public static double metersPerSecondToMilesPerHour(double metersPerSecond) { 159 return metersPerSecond / kMetersPerMile * (kSecondsPerMinute * kMinutesPerHour); 160 } 161 162 /** 163 * Converts given milliseconds to seconds. 164 * 165 * @param milliseconds The milliseconds to convert to seconds. 166 * @return Seconds converted from milliseconds. 167 */ 168 public static double millisecondsToSeconds(double milliseconds) { 169 return milliseconds / kMillisecondsPerSecond; 170 } 171 172 /** 173 * Converts given seconds to milliseconds. 174 * 175 * @param seconds The seconds to convert to milliseconds. 176 * @return Milliseconds converted from seconds. 177 */ 178 public static double secondsToMilliseconds(double seconds) { 179 return seconds * kMillisecondsPerSecond; 180 } 181 182 /** 183 * Converts kilograms into lbs (pound-mass). 184 * 185 * @param kilograms The kilograms to convert to lbs (pound-mass). 186 * @return Lbs (pound-mass) converted from kilograms. 187 */ 188 public static double kilogramsToLbs(double kilograms) { 189 return kilograms / kKilogramsPerLb; 190 } 191 192 /** 193 * Converts lbs (pound-mass) into kilograms. 194 * 195 * @param lbs The lbs (pound-mass) to convert to kilograms. 196 * @return Kilograms converted from lbs (pound-mass). 197 */ 198 public static double lbsToKilograms(double lbs) { 199 return lbs * kKilogramsPerLb; 200 } 201}