function assertEqual(a, b) {
/* Hackish function for stupid comparison number, strings and arrays */
if (a.toString() != b.toString()) {
alert(a + ' != ' + b);
}
}
function find_distance(a, b) {
/* Find distance between a and b не учитывая замкнутость координат на сфере */
if ((a * b) > 0) {
return Math.abs(a - b)
} else {
return Math.abs(a) + Math.abs(b)
}
}
function find_clockwise_distance(a, b) {
/* Find shortest distance between a and b учитывая замкнутость координат на сфере */
if (a < b) {
return b - a
} else {
return find_distance(a, 180) + find_distance(-180, b);
}
}
/*
function find_real_distance(distance) {
return Math.abs(Math.min(distance, 360 - distance))
}
function test_find_real_distance() {
assertEqual(find_real_distance(10), 10)
assertEqual(find_real_distance(180), 180)
assertEqual(find_real_distance(190), 170)
}
*/
function find_min_distance(points) {
/*
Find the start and end points between all other points are placed and
distance is minimal
Return start, end and distance
*/
distance = 360
start = null
end = null
points.sort(function(a, b) { return a - b; })
for(x = 0; x < points.length; x++) {
if (x == 0) {
prev = points.length - 1
} else {
prev = x - 1
}
test_distance = find_clockwise_distance(points[x], points[prev])
if (test_distance < distance) {
distance = test_distance
start = points[x]
end = points[prev]
}
}
return [start, end, distance]
}
function test_min_distance() {
assertEqual(find_min_distance([10, 20]), [10, 20, 10])
assertEqual(find_min_distance([10, -10]), [-10, 10, 20])
assertEqual(find_min_distance([170, -170]), [170, -170, 20])
assertEqual(find_min_distance([-170, 170]), [170, -170, 20])
assertEqual(find_min_distance([-170, 160, 170]), [160, -170, 30])
assertEqual(find_min_distance([-10, 10]), [-10, 10, 20])
}
function test_find_clockwise_distance() {
assertEqual(find_clockwise_distance(10, 20), 10)
assertEqual(find_clockwise_distance(20, 10), 350)
assertEqual(find_clockwise_distance(10, -20), 330)
assertEqual(find_clockwise_distance(-20, 10), 30)
assertEqual(find_clockwise_distance(-20, -30), 350)
assertEqual(find_clockwise_distance(-40, -30), 10)
}
function test_find_distance() {
assertEqual(find_distance(10, 20), 10)
assertEqual(find_distance(-10, 20), 30)
assertEqual(find_distance(20, -10), 30)
assertEqual(find_distance(-10, -50), 40)
assertEqual(find_distance(0, 5), 5)
assertEqual(find_distance(0, -5), 5)
}
function run_tests() {
test_find_distance();
test_find_clockwise_distance();
test_min_distance();
}