#include <QList>
#include <QSharedData>
#include <QStringList>
+#include <QLocale>
template <typename T>
class KisTridiagonalSystem
alpha[1] = -c[0] / b[0];
beta[1] = f[0] / b[0];
- for (i = 1; i < size - 1; i++) {
+ for (i = 1; i < size - 1; ++i) {
alpha[i+1] = -c[i] /
(a[i-1] * alpha[i] + b[i]);
/
(b.last() + a.last() * alpha.last());
- for (i = size - 2; i >= 0; i--)
+ for (i = size - 2; i >= 0; --i)
x[i] = alpha[i+1] * x[i+1] + beta[i+1];
return x;
int m_intervals;
public:
- KisCubicSpline() {}
- KisCubicSpline(const QList<T_point> &a) {
+ KisCubicSpline() : m_begin(0), m_end(0), m_intervals(0) {}
+ KisCubicSpline(const QList<T_point> &a) : m_begin(0), m_end(0),
+ m_intervals(0) {
createSpline(a);
}
m_d.resize(intervals);
m_h.resize(intervals);
- for (i = 0; i < intervals; i++) {
+ for (i = 0; i < intervals; ++i) {
m_h[i] = a[i+1].x() - a[i].x();
m_a.append(a[i].y());
}
QList<T> tri_f;
QList<T> tri_a; /* equals to @tri_c */
- for (i = 0; i < intervals - 1; i++) {
+ for (i = 0; i < intervals - 1; ++i) {
tri_b.append(2.*(m_h[i] + m_h[i+1]));
tri_f.append(6.*((m_a[i+2] - m_a[i+1]) / m_h[i+1] - (m_a[i+1] - m_a[i]) / m_h[i]));
}
- for (i = 1; i < intervals - 1; i++)
+ for (i = 1; i < intervals - 1; ++i)
tri_a.append(m_h[i]);
if (intervals > 1) {
m_c.prepend(0);
m_c.append(0);
- for (i = 0; i < intervals; i++)
+ for (i = 0; i < intervals; ++i)
m_d[i] = (m_c[i+1] - m_c[i]) / m_h[i];
- for (i = 0; i < intervals; i++)
+ for (i = 0; i < intervals; ++i)
m_b[i] = -0.5 * (m_c[i] * m_h[i]) - (1 / 6.0) * (m_d[i] * m_h[i] * m_h[i]) + (m_a[i+1] - m_a[i]) / m_h[i];
}
int findRegion(T x, T &x0) const {
int i;
x0 = m_begin;
- for (i = 0; i < m_intervals; i++) {
+ for (i = 0; i < m_intervals; ++i) {
if (x >= x0 && x < x0 + m_h[i])
return i;
x0 += m_h[i];
QString KisCubicCurve::toString() const
{
QString sCurve;
+ QLocale locale;
foreach(const QPointF & pair, d->data->points) {
- sCurve += QString::number(pair.x());
- sCurve += ',';
+ sCurve += locale.toString(pair.x());
+ sCurve += '/';
sCurve += QString::number(pair.y());
sCurve += ';';
}
QList<QPointF> points;
foreach(const QString & pair, data) {
- if (pair.indexOf(',') > -1) {
+ if (pair.indexOf('/') > -1) {
QPointF p;
- p.rx() = pair.section(',', 0, 0).toDouble();
- p.ry() = pair.section(',', 1, 1).toDouble();
+ p.rx() = pair.section('/', 0, 0).toDouble();
+ p.ry() = pair.section('/', 1, 1).toDouble();
points.append(p);
}
}