Неправильный результат функции toFixed () [duplicate]

Здесь стандартный метод , AFAIK. В основном суммируйте поперечные произведения вокруг каждой вершины. Гораздо проще, чем триангуляция.

Код Python, заданный многоугольником, представленным в виде списка (x, y) вершинных координат, неявно обертывающих от последней вершины к первому:

def area(p):
    return 0.5 * abs(sum(x0*y1 - x1*y0
                         for ((x0, y0), (x1, y1)) in segments(p)))

def segments(p):
    return zip(p, p[1:] + [p[0]])

Дэвид Лехави комментирует: стоит упомянуть, почему работает этот алгоритм: это применение теоремы Грина для функций -y и x; точно так же работает планиметр . Более конкретно:

Формула выше = integral_over_perimeter(-y dx + x dy) = integral_over_area((-(-dy)/dy+dx/dx) dy dx) = 2 Area

27
задан Michael Borgwardt 12 April 2010 в 14:06
поделиться

3 ответа

Был «порт» класса Java BigDecimal (я думаю, что он находится здесь: http://freshmeat.net/projects/js_bigdecimal/ ) в течение длительного времени. Я долго смотрел на него, и это казалось очень громоздким и огромным, но (если это тот, о котором я думаю), он использовался как часть некоторых инструментов криптографии, поэтому есть приличный шанс, что он работает нормально.

Поскольку криптография является вероятной областью для генерации необходимости в таких вещах, это хороший способ отследить такие пакеты.

edit: Спасибо @Daniel (комментарий к вопросу) для этого более старый вопрос SO: https://stackoverflow.com/questions/744099/javascript-bigdecimal-library

6
ответ дан Community 17 August 2018 в 19:51
поделиться

Поскольку это, похоже, не упоминается, вот другой . Я еще не использовал его (пока), поэтому я обновляю сообщение после того, как попробую.

1
ответ дан hayavuk 17 August 2018 в 19:51
поделиться

Как автор, я рекомендую bignumber.js или big.js , «небольшую, быструю библиотеку Javascript для арифметики с произвольной точностью с десятичными числами».

Для более зрелой библиотеки рекомендуется также ICU4J BigDecimal .

14
ответ дан MikeM 17 August 2018 в 19:51
поделиться
  • 1
    Последнее на самом деле является библиотекой, упомянутой в другом ответе, теперь, как мы надеемся, более постоянным домом на github. – Michael Borgwardt 9 November 2012 в 12:16
  • 2
    bignumber.js теперь находится на jsdelivr CDN – Xotic750 11 September 2013 в 00:56
Другие вопросы по тегам:

Похожие вопросы: