Есть две проблемы. Первая состоит в том, что Math.sin () и Math.cos () возвращает результат с некоторой ошибкой f в точке суммирования , Поэтому вычисления не стабильны.
Второе - это геометрия c вычисления , вы забыли гипотенуза , поскольку рисунок показывает, что треугольник должен быть прямоугольным треугольником.
Решение:
1- Рассчитать длину стороны b , как вы, затем получите гипотенузу (c) и проверьте его.
2 - если a² + b² = c² затем (a, b, c) являются допустимыми сторонами, в противном случае самые близкие возможные стороны образуют прямоугольный треугольник.
3- Установите точки внутри массива в виде двумерной сетки ( Как показано на рисунке выше ).
4- Точки подключения . Самое эффективное решение Я полагаю, что нужно получить кратчайший путь , как показано на рисунке, и при обычных соединениях между линиями самый короткий путь - это сама линия.
5 - Вернуть массив, содержащий путь, затем присвоить значение для каждой ячейки в сетке, используя массив путей
Здесь ссылка содержала мою реализацию, но (без функции кратчайшего пути я оставил функцию пустой)
Javascript -Код