Как рисовать бесшовные кривые, используя графику Android?

Я хочу рисовать бесшовные кривые, используя графику Android, используя, например, следующие

 canvas.quadTo(.....);

Ссылка на Android говорит, что этот метод с использованием кривой Безье

но этот метод не поддерживает кривую рисования, которая имеет более трех точек

P1, P2, P3, P4, P5

Как рисовать кривую, как показано ниже?

Matlab

Я слышал, что это "Установка нелинейной кривой".

Имеется ли библиотека привязки кривой для андроида?

Ответ 1

В то время как для iPhone у вас есть DataAnalysis, для Android вы можете использовать Google Analytics SDK v2 за то, что вы имеете в виду.

Вот пример запроса:

var lineChart = getChartObj();
lineChart.setParams(barChart.getParams());
lineChart.setParam('cht', 'lc');
lineChart.setParam('chm', '');
var lineChartURL = paramsToURL(chartData.chartParams, chartData.baseURL);
drawChart('visitorDiv',lineChartURL);

Вам может показаться интереснее проверить более подробную информацию о графиках, чтобы точно соответствовать модели которую вы хотите построить.

Еще одна альтернатива, которую вы также можете рассмотреть, - это QML с использованием линейного графика с Qt Quick:

Graph.LineGraph {
    width: parent.width
    height: parent.height - legend.height - parent.spacing
    model: learningProgressModel

    dimensions: [
        Graph.Dimension {
            id: accuracyDimension
            dataColumn: 5
            color: "#ffb12d"
            maximumValue: 1.0
            label: i18n("Accuracy")
            unit: "%"
            unitFactor: 100
        },
        Graph.Dimension {
            id: charactersPerMinuteDimension
            dataColumn: 6
            color: "#38aef4"
            maximumValue: 400
            label: i18n("Characters per Minute")
        }
    ]
}

Octave для Android также может быть интересным, особенно если вы хотите иметь широкую опцию построение моделей. Вы можете использовать команду drawBezierCurve, предоставляя только точки из ваших данных:

points = [0 0; 3 1; -2 1; 1 0];
 drawBezierCurve(points);
 hold on
 plot(points([1 4],1),points([1 4],2),'go');
 plot(points([2 3],1),points([2 3],2),'rs');
 line(points([1 2],1),points([1 2],2),'color','k');
 line(points([3 4],1),points([3 4],2),'color','k');
 h = drawBezierCurve(points, 'discretization', 6, 'color','r');
 hold off        

Затем для достижения Нелинейной кривой фитинга, которую вы хотите отобразить на вашем Android, просто используйте данные или которая лучше подходит вам.