summaryrefslogtreecommitdiffstats
path: root/src/2geom/solve-bezier-parametric.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/2geom/solve-bezier-parametric.cpp')
-rw-r--r--src/2geom/solve-bezier-parametric.cpp27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/2geom/solve-bezier-parametric.cpp b/src/2geom/solve-bezier-parametric.cpp
index 76cf65e17..ed693c584 100644
--- a/src/2geom/solve-bezier-parametric.cpp
+++ b/src/2geom/solve-bezier-parametric.cpp
@@ -68,13 +68,20 @@ find_parametric_bezier_roots(Geom::Point const *w, /* The control points */
break;
}
- /* Otherwise, solve recursively after subdividing control polygon */
- Geom::Point Left[degree+1], /* New left and right */
- Right[degree+1]; /* control polygons */
+ /*
+ * Otherwise, solve recursively after subdividing control polygon
+ * New left and right control polygons
+ */
+ Geom::Point *Left = new Geom::Point[degree+1];
+ Geom::Point *Right = new Geom::Point[degree+1];
+
Bezier(w, degree, 0.5, Left, Right);
total_subs ++;
find_parametric_bezier_roots(Left, degree, solutions, depth+1);
find_parametric_bezier_roots(Right, degree, solutions, depth+1);
+
+ delete[] Left;
+ delete[] Right;
}
@@ -191,7 +198,10 @@ Bezier(Geom::Point const *V, /* Control pts */
Geom::Point *Left, /* RETURN left half ctl pts */
Geom::Point *Right) /* RETURN right half ctl pts */
{
- Geom::Point Vtemp[degree+1][degree+1];
+ Geom::Point **Vtemp = new Geom::Point* [degree+1];
+
+ for (unsigned int i = 0; i < degree+1; ++i)
+ Vtemp[i] = new Geom::Point[degree+1];
/* Copy control points */
std::copy(V, V+degree+1, Vtemp[0]);
@@ -208,7 +218,14 @@ Bezier(Geom::Point const *V, /* Control pts */
for (unsigned j = 0; j <= degree; j++)
Right[j] = Vtemp[degree-j][j];
- return (Vtemp[degree][0]);
+ Geom::Point return_value = Vtemp[degree][0];
+
+ for (unsigned int i = 0; i < degree+1; ++i)
+ delete[] Vtemp[i];
+
+ delete[] Vtemp;
+
+ return return_value;
}
};