Площадь под кардинальной интерполяционной кривой - PullRequest
0 голосов
/ 02 октября 2018

Я хочу рассчитать площадь синей области под кривой.Кривая получается путем кардинальной интерполяции из красных точек данных с использованием D3's line().

enter image description here

Я пытался вычислить площадь, как если бы это была линейная интерполяция (вдоль черных линий), но это не совсем точное число.

Пожалуйста, помогите мне здесь.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я решил эту проблему, основываясь на этом блестящем ответе: https://stackoverflow.com/a/10045537/4505826. Помните, что путь должен быть закрытым, что означает, что он должен заканчиваться буквой Z.

Когда я запускаю код,браузер продолжает уведомлять об этих ошибках:

  • path.getPointAtLength () не является функцией
  • path.getTotalLength () не является функцией
  • Uncaught TypeError: Не удается прочитатьсвойство 'createElementNS' не определено

:::: РЕШЕНИЕ: Настройте приведенный выше код следующим образом ::::

path.getPointAtLength(d)   ->    path.node().getPointAtLength(d)

path.getTotalLength(d)   ->    path.node().getTotalLength(d)

И замените

var doc = path.ownerDocument;
var poly = doc.createElementNS('http://www.w3.org/2000/svg','polygon');

от

var poly = document.createElementNS('http://www.w3.org/2000/svg','polygon');

с этого ответа https://stackoverflow.com/a/25611318/4505826.

0 голосов
/ 02 октября 2018

Если вы хотите вычислить сумму всех трапециевидных частичных областей, вы можете использовать следующую формулу:

Area = ((sum of all y values)- 0.5*((first y value)+(last y value)) * (delta x)

Или код JavaSript:

A = (y.reduce((s,v)=>s+v)-.5*(y[0]+y[y.length-1]))*deltax
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...