mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-12 19:10:21 +03:00
105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
|
|
'use strict';
|
|
|
|
function constrain(input, min, max) {
|
|
|
|
if (input < min) {
|
|
return min;
|
|
}
|
|
|
|
if (input > max) {
|
|
return max;
|
|
}
|
|
|
|
return input;
|
|
}
|
|
|
|
function zeroPad(value, width) {
|
|
value = "" + value;
|
|
|
|
while (value.length < width) {
|
|
value = "0" + value;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
|
|
function generateFilename(config, prefix, suffix) {
|
|
var date = new Date();
|
|
var filename = prefix;
|
|
|
|
if (config) {
|
|
if (config.flightControllerIdentifier) {
|
|
filename = config.flightControllerIdentifier + '_' + config.flightControllerVersion + "_" + filename;
|
|
}
|
|
|
|
if (config.name && config.name.trim() !== '') {
|
|
filename = filename + '_' + config.name.trim().replace(' ', '_');
|
|
}
|
|
}
|
|
|
|
filename = filename + '_' + date.getFullYear()
|
|
+ zeroPad(date.getMonth() + 1, 2)
|
|
+ zeroPad(date.getDate(), 2)
|
|
+ '_' + zeroPad(date.getHours(), 2)
|
|
+ zeroPad(date.getMinutes(), 2)
|
|
+ zeroPad(date.getSeconds(), 2);
|
|
|
|
return filename + '.' + suffix;
|
|
}
|
|
|
|
function scaleRangeInt(x, srcMin, srcMax, destMin, destMax) {
|
|
let a = (destMax - destMin) * (x - srcMin);
|
|
let b = srcMax - srcMin;
|
|
return Math.round((a / b) + destMin);
|
|
}
|
|
|
|
function distanceOnLine(start, end, distance)
|
|
{
|
|
var vx = end[0] - start[0];
|
|
var vy = end[1] - start[1];
|
|
var mag = Math.sqrt(vx * vx + vy * vy);
|
|
vx /= mag;
|
|
vy /= mag;
|
|
|
|
var px = start[0] + vx * (mag + distance);
|
|
var py = start[1] + vy * (mag + distance);
|
|
|
|
return [px, py];
|
|
}
|
|
|
|
function wrap_360(angle)
|
|
{
|
|
if (angle >= 360)
|
|
angle -= 360;
|
|
if (angle < 0)
|
|
angle += 360;
|
|
return angle;
|
|
}
|
|
|
|
function rad2Deg(rad)
|
|
{
|
|
return rad * (180 / Math.PI);
|
|
}
|
|
|
|
function deg2Rad(deg)
|
|
{
|
|
return deg * (Math.PI / 180);
|
|
}
|
|
|
|
function calculate_new_cooridatnes(coord, bearing, distance)
|
|
{
|
|
var lat = deg2Rad(coord.lat);
|
|
var lon = deg2Rad(coord.lon);
|
|
bearing = deg2Rad(bearing);
|
|
var delta = distance / 637100000; // Earth radius in cm
|
|
|
|
var latNew = Math.asin(Math.sin(lat) * Math.cos(delta) + Math.cos(lat) * Math.sin(delta) * Math.cos(bearing));
|
|
var lonNew = lon + Math.atan2(Math.sin(bearing) * Math.sin(delta) * Math.cos(lat), Math.cos(delta) - Math.sin(lat) * Math.sin(lat));
|
|
return {
|
|
lat: rad2Deg(latNew),
|
|
lon: rad2Deg(lonNew),
|
|
}
|
|
}
|
|
|
|
module.exports = { constrain, zeroPad, generateFilename, scaleRangeInt, distanceOnLine, wrap_360, rad2Deg, calculate_new_cooridatnes }
|