1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-12 19:10:21 +03:00
inav-configurator/js/helpers.js
Pawel Spychalski (DzikuVx) a1f51b866f Pass FC.CONFIG as reference
2024-05-10 14:37:39 +02:00

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 }