forked from upstream-mirrors/OpenTracks
Code cleanup for unit conversion
This commit is contained in:
@@ -20,6 +20,7 @@ import com.google.android.apps.mytracks.content.MyTracksProviderUtils;
|
|||||||
import com.google.android.apps.mytracks.content.Track;
|
import com.google.android.apps.mytracks.content.Track;
|
||||||
import com.google.android.apps.mytracks.io.sync.SyncUtils;
|
import com.google.android.apps.mytracks.io.sync.SyncUtils;
|
||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -32,6 +33,9 @@ import android.os.AsyncTask;
|
|||||||
*/
|
*/
|
||||||
public class DeleteAsyncTask extends AsyncTask<Void, Integer, Boolean> {
|
public class DeleteAsyncTask extends AsyncTask<Void, Integer, Boolean> {
|
||||||
|
|
||||||
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
|
|
||||||
private DeleteActivity deleteActivity;
|
private DeleteActivity deleteActivity;
|
||||||
private final long[] trackIds;
|
private final long[] trackIds;
|
||||||
private final Context context;
|
private final Context context;
|
||||||
@@ -82,7 +86,7 @@ public class DeleteAsyncTask extends AsyncTask<Void, Integer, Boolean> {
|
|||||||
if (isCancelled()) {
|
if (isCancelled()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Thread.sleep(1000);
|
Thread.sleep(ONE_SECOND);
|
||||||
}
|
}
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.google.android.apps.mytracks.services.sensors.SensorManager;
|
|||||||
import com.google.android.apps.mytracks.services.sensors.SensorManagerFactory;
|
import com.google.android.apps.mytracks.services.sensors.SensorManagerFactory;
|
||||||
import com.google.android.apps.mytracks.services.sensors.SensorUtils;
|
import com.google.android.apps.mytracks.services.sensors.SensorUtils;
|
||||||
import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils;
|
import com.google.android.apps.mytracks.util.TrackRecordingServiceConnectionUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
import com.google.protobuf.InvalidProtocolBufferException;
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
|
|
||||||
@@ -41,7 +42,9 @@ import android.widget.TextView;
|
|||||||
public class SensorStateActivity extends AbstractMyTracksActivity {
|
public class SensorStateActivity extends AbstractMyTracksActivity {
|
||||||
|
|
||||||
private static final String TAG = SensorStateActivity.class.getName();
|
private static final String TAG = SensorStateActivity.class.getName();
|
||||||
private static final long ONE_SECOND = 1000;
|
|
||||||
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
|
|
||||||
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
private TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package com.google.android.apps.mytracks;
|
|||||||
import com.google.android.apps.mytracks.services.ITrackRecordingService;
|
import com.google.android.apps.mytracks.services.ITrackRecordingService;
|
||||||
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
|
import com.google.android.apps.mytracks.services.TrackRecordingServiceConnection;
|
||||||
import com.google.android.apps.mytracks.util.StringUtils;
|
import com.google.android.apps.mytracks.util.StringUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
@@ -38,7 +39,9 @@ import android.widget.TextView;
|
|||||||
public class TrackController {
|
public class TrackController {
|
||||||
|
|
||||||
private static final String TAG = TrackController.class.getSimpleName();
|
private static final String TAG = TrackController.class.getSimpleName();
|
||||||
private static final int ONE_SECOND = 1000;
|
|
||||||
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
|
|
||||||
private final Activity activity;
|
private final Activity activity;
|
||||||
private final TrackRecordingServiceConnection trackRecordingServiceConnection;
|
private final TrackRecordingServiceConnection trackRecordingServiceConnection;
|
||||||
|
|||||||
@@ -360,7 +360,8 @@ public class SearchEngine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Score recent tracks higher.
|
// Score recent tracks higher.
|
||||||
long timeAgoHours = (query.currentTimestamp - timestamp) / (60L * 60L * 1000L);
|
long timeAgoHours = (long) ((query.currentTimestamp - timestamp) * UnitConversions.MS_TO_S
|
||||||
|
* UnitConversions.S_TO_MIN * UnitConversions.MIN_TO_HR);
|
||||||
if (timeAgoHours > 0L) {
|
if (timeAgoHours > 0L) {
|
||||||
return squash(timeAgoHours);
|
return squash(timeAgoHours);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import com.google.android.apps.mytracks.util.LocationUtils;
|
|||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
import com.google.android.apps.mytracks.util.StatsUtils;
|
import com.google.android.apps.mytracks.util.StatsUtils;
|
||||||
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.location.Location;
|
import android.location.Location;
|
||||||
@@ -53,7 +54,8 @@ public class StatsFragment extends Fragment implements TrackDataListener {
|
|||||||
|
|
||||||
public static final String STATS_FRAGMENT_TAG = "statsFragment";
|
public static final String STATS_FRAGMENT_TAG = "statsFragment";
|
||||||
|
|
||||||
private static final int ONE_SECOND = 1000;
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
|
|
||||||
private TrackDataHub trackDataHub;
|
private TrackDataHub trackDataHub;
|
||||||
private Handler handler;
|
private Handler handler;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.google.android.apps.mytracks.content.Waypoint;
|
|||||||
import com.google.android.apps.mytracks.io.file.TrackFileFormat;
|
import com.google.android.apps.mytracks.io.file.TrackFileFormat;
|
||||||
import com.google.android.apps.mytracks.util.StringUtils;
|
import com.google.android.apps.mytracks.util.StringUtils;
|
||||||
import com.google.android.apps.mytracks.util.SystemUtils;
|
import com.google.android.apps.mytracks.util.SystemUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -172,7 +173,8 @@ public class TcxTrackWriter implements TrackWriter {
|
|||||||
if (printWriter != null) {
|
if (printWriter != null) {
|
||||||
String startTime = StringUtils.formatDateTimeIso8601(
|
String startTime = StringUtils.formatDateTimeIso8601(
|
||||||
track.getTripStatistics().getStartTime());
|
track.getTripStatistics().getStartTime());
|
||||||
long totalTimeInSeconds = track.getTripStatistics().getTotalTime() / 1000;
|
long totalTimeInSeconds = (long) (track.getTripStatistics().getTotalTime()
|
||||||
|
* UnitConversions.MS_TO_S);
|
||||||
|
|
||||||
printWriter.println("<Activities>");
|
printWriter.println("<Activities>");
|
||||||
printWriter.println("<Activity Sport=\"" + sportType.getName() + "\">");
|
printWriter.println("<Activity Sport=\"" + sportType.getName() + "\">");
|
||||||
|
|||||||
+4
-3
@@ -30,6 +30,7 @@ import com.google.android.apps.mytracks.util.LocationUtils;
|
|||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
import com.google.android.apps.mytracks.util.StringUtils;
|
import com.google.android.apps.mytracks.util.StringUtils;
|
||||||
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -413,9 +414,9 @@ abstract class AbstractFileTrackImporter extends DefaultHandler implements Track
|
|||||||
* speed and bearing will likely be off, so the statistics for things
|
* speed and bearing will likely be off, so the statistics for things
|
||||||
* like max speed will also be off.
|
* like max speed will also be off.
|
||||||
*/
|
*/
|
||||||
float speed = trackData.lastLocationInCurrentSegment.distanceTo(location) * 1000.0f
|
double duration = timeDifference * UnitConversions.MS_TO_S;
|
||||||
/ timeDifference;
|
double speed = trackData.lastLocationInCurrentSegment.distanceTo(location) / duration;
|
||||||
location.setSpeed(speed);
|
location.setSpeed((float) speed);
|
||||||
}
|
}
|
||||||
location.setBearing(trackData.lastLocationInCurrentSegment.bearingTo(location));
|
location.setBearing(trackData.lastLocationInCurrentSegment.bearingTo(location));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ import com.google.android.apps.mytracks.util.PreferencesUtils;
|
|||||||
import com.google.android.apps.mytracks.util.SystemUtils;
|
import com.google.android.apps.mytracks.util.SystemUtils;
|
||||||
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
import com.google.android.apps.mytracks.util.TrackIconUtils;
|
||||||
import com.google.android.apps.mytracks.util.TrackNameUtils;
|
import com.google.android.apps.mytracks.util.TrackNameUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.gms.common.ConnectionResult;
|
import com.google.android.gms.common.ConnectionResult;
|
||||||
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
|
import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
|
||||||
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
|
import com.google.android.gms.common.GooglePlayServicesClient.OnConnectionFailedListener;
|
||||||
@@ -101,8 +102,13 @@ public class TrackRecordingService extends Service {
|
|||||||
public static final double MAX_NO_MOVEMENT_SPEED = 0.224;
|
public static final double MAX_NO_MOVEMENT_SPEED = 0.224;
|
||||||
|
|
||||||
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
private static final String TAG = TrackRecordingService.class.getSimpleName();
|
||||||
private static final long ONE_SECOND = 1000; // in milliseconds
|
|
||||||
private static final long ONE_MINUTE = 60 * ONE_SECOND; // in milliseconds
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
|
|
||||||
|
// 1 minute in milliseconds
|
||||||
|
private static final long ONE_MINUTE = (long) (UnitConversions.MIN_TO_S
|
||||||
|
* UnitConversions.S_TO_MS);
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final int MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS = 3;
|
static final int MAX_AUTO_RESUME_TRACK_RETRY_ATTEMPTS = 3;
|
||||||
|
|||||||
+4
-1
@@ -19,6 +19,7 @@ package com.google.android.apps.mytracks.services.sensors;
|
|||||||
import com.google.android.apps.mytracks.content.Sensor.SensorDataSet;
|
import com.google.android.apps.mytracks.content.Sensor.SensorDataSet;
|
||||||
import com.google.android.apps.mytracks.content.Sensor.SensorState;
|
import com.google.android.apps.mytracks.content.Sensor.SensorState;
|
||||||
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
import com.google.android.apps.mytracks.util.PreferencesUtils;
|
||||||
|
import com.google.android.apps.mytracks.util.UnitConversions;
|
||||||
import com.google.android.maps.mytracks.R;
|
import com.google.android.maps.mytracks.R;
|
||||||
|
|
||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
@@ -39,6 +40,8 @@ import java.util.ArrayList;
|
|||||||
*/
|
*/
|
||||||
public class BluetoothSensorManager extends SensorManager {
|
public class BluetoothSensorManager extends SensorManager {
|
||||||
|
|
||||||
|
// 1 second in milliseconds
|
||||||
|
private static final long ONE_SECOND = (long) UnitConversions.S_TO_MS;
|
||||||
private static final BluetoothAdapter bluetoothAdapter = getDefaultBluetoothAdapter();
|
private static final BluetoothAdapter bluetoothAdapter = getDefaultBluetoothAdapter();
|
||||||
private static final String TAG = BluetoothConnectionManager.class.getSimpleName();
|
private static final String TAG = BluetoothConnectionManager.class.getSimpleName();
|
||||||
|
|
||||||
@@ -69,7 +72,7 @@ public class BluetoothSensorManager extends SensorManager {
|
|||||||
while (adapters.isEmpty()) {
|
while (adapters.isEmpty()) {
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
try {
|
try {
|
||||||
mutex.wait(1000L);
|
mutex.wait(ONE_SECOND);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
Log.e(TAG, "Interrupted while waiting for default bluetooth adapter", e);
|
Log.e(TAG, "Interrupted while waiting for default bluetooth adapter", e);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -50,7 +50,6 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
|||||||
static final float TTS_SPEECH_RATE = 0.9f;
|
static final float TTS_SPEECH_RATE = 0.9f;
|
||||||
|
|
||||||
private static final String TAG = AnnouncementPeriodicTask.class.getSimpleName();
|
private static final String TAG = AnnouncementPeriodicTask.class.getSimpleName();
|
||||||
private static final long HOUR_TO_MILLISECOND = 60 * 60 * 1000;
|
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final HashMap<String, String> SPEECH_PARAMS = new HashMap<String, String>();
|
static final HashMap<String, String> SPEECH_PARAMS = new HashMap<String, String>();
|
||||||
@@ -249,7 +248,9 @@ public class AnnouncementPeriodicTask implements PeriodicTask {
|
|||||||
} else {
|
} else {
|
||||||
speed = speed == 0 ? 0.0 : 1 / speed;
|
speed = speed == 0 ? 0.0 : 1 / speed;
|
||||||
int paceId = metricUnits ? R.string.voice_pace_per_kilometer : R.string.voice_pace_per_mile;
|
int paceId = metricUnits ? R.string.voice_pace_per_kilometer : R.string.voice_pace_per_mile;
|
||||||
rate = context.getString(paceId, getAnnounceTime((long) (speed * HOUR_TO_MILLISECOND)));
|
long time = (long) (speed * UnitConversions.HR_TO_MIN * UnitConversions.MIN_TO_S
|
||||||
|
* UnitConversions.S_TO_MS);
|
||||||
|
rate = context.getString(paceId, getAnnounceTime(time));
|
||||||
}
|
}
|
||||||
|
|
||||||
int totalDistanceId = metricUnits ? R.plurals.voiceTotalDistanceKilometers
|
int totalDistanceId = metricUnits ? R.plurals.voiceTotalDistanceKilometers
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class LocationUtils {
|
|||||||
|
|
||||||
private static final String TAG = LocationUtils.class.getSimpleName();
|
private static final String TAG = LocationUtils.class.getSimpleName();
|
||||||
|
|
||||||
private static final long MAX_LOCATION_AGE_MS = 60 * 1000; // 1 minute
|
// 1 minute in milliseconds
|
||||||
|
private static final long MAX_LOCATION_AGE_MS = (long) (UnitConversions.MIN_TO_S
|
||||||
|
* UnitConversions.S_TO_MS);
|
||||||
|
|
||||||
private LocationUtils() {}
|
private LocationUtils() {}
|
||||||
|
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ public class StringUtils {
|
|||||||
*/
|
*/
|
||||||
public static String formatElapsedTime(long time) {
|
public static String formatElapsedTime(long time) {
|
||||||
/*
|
/*
|
||||||
* Temporary workaround for DateUtils.formatElapsedTime(time / 1000). In API
|
* Temporary workaround for DateUtils.formatElapsedTime(time * MS_TO_S). In API
|
||||||
* level 17, it returns strings like "1:0:00" instead of "1:00:00", which
|
* level 17, it returns strings like "1:0:00" instead of "1:00:00", which
|
||||||
* breaks several unit tests.
|
* breaks several unit tests.
|
||||||
*/
|
*/
|
||||||
@@ -91,7 +91,7 @@ public class StringUtils {
|
|||||||
long hours = 0;
|
long hours = 0;
|
||||||
long minutes = 0;
|
long minutes = 0;
|
||||||
long seconds = 0;
|
long seconds = 0;
|
||||||
long elapsedSeconds = time / 1000;
|
long elapsedSeconds = (long) (time * UnitConversions.MS_TO_S);
|
||||||
|
|
||||||
if (elapsedSeconds >= 3600) {
|
if (elapsedSeconds >= 3600) {
|
||||||
hours = elapsedSeconds / 3600;
|
hours = elapsedSeconds / 3600;
|
||||||
@@ -314,7 +314,7 @@ public class StringUtils {
|
|||||||
if (fractional != null) {
|
if (fractional != null) {
|
||||||
// Regex ensures fractional part is in (0,1)
|
// Regex ensures fractional part is in (0,1)
|
||||||
float fractionalSeconds = Float.parseFloat(fractional);
|
float fractionalSeconds = Float.parseFloat(fractional);
|
||||||
long fractionalMillis = (long) (fractionalSeconds * 1000.0f);
|
long fractionalMillis = (long) (fractionalSeconds * UnitConversions.S_TO_MS);
|
||||||
time += fractionalMillis;
|
time += fractionalMillis;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,7 +363,7 @@ public class StringUtils {
|
|||||||
}
|
}
|
||||||
int[] parts = new int[3];
|
int[] parts = new int[3];
|
||||||
|
|
||||||
long seconds = time / 1000;
|
long seconds = (long) (time * UnitConversions.MS_TO_S);
|
||||||
parts[0] = (int) (seconds % 60);
|
parts[0] = (int) (seconds % 60);
|
||||||
int minutes = (int) (seconds / 60);
|
int minutes = (int) (seconds / 60);
|
||||||
parts[1] = minutes % 60;
|
parts[1] = minutes % 60;
|
||||||
|
|||||||
@@ -26,8 +26,11 @@ public class UnitConversions {
|
|||||||
|
|
||||||
// Time
|
// Time
|
||||||
|
|
||||||
|
// multiplication factor to convert seconds to milliseconds
|
||||||
|
public static final double S_TO_MS = 1000.0;
|
||||||
|
|
||||||
// multiplication factor to convert milliseconds to seconds
|
// multiplication factor to convert milliseconds to seconds
|
||||||
public static final double MS_TO_S = 1 / 1000.0;
|
public static final double MS_TO_S = 1 / S_TO_MS;
|
||||||
|
|
||||||
// multiplication factor to convert minutes to seconds
|
// multiplication factor to convert minutes to seconds
|
||||||
public static final double MIN_TO_S = 60.0;
|
public static final double MIN_TO_S = 60.0;
|
||||||
@@ -41,14 +44,6 @@ public class UnitConversions {
|
|||||||
// multiplication factor to convert minutes to hours
|
// multiplication factor to convert minutes to hours
|
||||||
public static final double MIN_TO_HR = 1 / HR_TO_MIN;
|
public static final double MIN_TO_HR = 1 / HR_TO_MIN;
|
||||||
|
|
||||||
// Weight
|
|
||||||
|
|
||||||
// multiplication factor to convert kilograms to pounds
|
|
||||||
public static final double KG_TO_LB = 2.2046;
|
|
||||||
|
|
||||||
// multiplication factor to convert pounds to kilograms
|
|
||||||
public static final double LB_TO_KG = 1 / KG_TO_LB;
|
|
||||||
|
|
||||||
// Distance
|
// Distance
|
||||||
|
|
||||||
// multiplication factor to convert kilometers to miles
|
// multiplication factor to convert kilometers to miles
|
||||||
@@ -75,8 +70,13 @@ public class UnitConversions {
|
|||||||
// multiplication factor to convert meters to feet
|
// multiplication factor to convert meters to feet
|
||||||
public static final double M_TO_FT = M_TO_MI * MI_TO_FT;
|
public static final double M_TO_FT = M_TO_MI * MI_TO_FT;
|
||||||
|
|
||||||
// multiplication factor to convert meters per second to kilometers per hour
|
// Weight
|
||||||
public static final double MS_TO_KMH = 3.6;
|
|
||||||
|
// multiplication factor to convert kilograms to pounds
|
||||||
|
public static final double KG_TO_LB = 2.2046;
|
||||||
|
|
||||||
|
// multiplication factor to convert pounds to kilograms
|
||||||
|
public static final double LB_TO_KG = 1 / KG_TO_LB;
|
||||||
|
|
||||||
// Calories
|
// Calories
|
||||||
|
|
||||||
@@ -94,6 +94,9 @@ public class UnitConversions {
|
|||||||
|
|
||||||
// Others
|
// Others
|
||||||
|
|
||||||
|
// multiplication factor to convert meters per second to kilometers per hour
|
||||||
|
public static final double MS_TO_KMH = M_TO_KM / (S_TO_MIN * MIN_TO_HR);
|
||||||
|
|
||||||
// multiplication factor to convert degrees to radians
|
// multiplication factor to convert degrees to radians
|
||||||
public static final double DEG_TO_RAD = Math.PI / 180.0;
|
public static final double DEG_TO_RAD = Math.PI / 180.0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user