[OpenSCAD] Bezier functions in OpenSCAD

David Eccles (gringer) bioinformatics at gringene.org
Wed Apr 1 06:49:01 EDT 2015


I found a bezier curve library that looks somewhat reasonable, in that it
doesn't have any hard-coded values or iteration limitations:

http://www.thingiverse.com/download:98926

Compare with this library, which suffers from "I need to write a different
function for different arguments" syndrome:

https://github.com/chadkirby/BezierScad/blob/master/BezierScad.scad

Is there any chance of adding at least the bezier functions to OpenSCAD:

/*
	Bernstein Basis Functions

	For Bezier curves, these functions give the weights per control point.

*/
function BEZ03(u) = pow((1-u), 3);
function BEZ13(u) = 3*u*(pow((1-u),2));
function BEZ23(u) = 3*(pow(u,2))*(1-u);
function BEZ33(u) = pow(u,3);

// Calculate a singe point along a cubic bezier curve
// Given a set of 4 control points, and a parameter 0 <= 'u' <= 1
// These functions will return the exact point on the curve
function PointOnBezCubic2D(p0, p1, p2, p3, u) = [
	BEZ03(u)*p0[0]+BEZ13(u)*p1[0]+BEZ23(u)*p2[0]+BEZ33(u)*p3[0],
	BEZ03(u)*p0[1]+BEZ13(u)*p1[1]+BEZ23(u)*p2[1]+BEZ33(u)*p3[1]];

function PointOnBezCubic3D(p0, p1, p2, p3, u) = [
	BEZ03(u)*p0[0]+BEZ13(u)*p1[0]+BEZ23(u)*p2[0]+BEZ33(u)*p3[0],
	BEZ03(u)*p0[1]+BEZ13(u)*p1[1]+BEZ23(u)*p2[1]+BEZ33(u)*p3[1],
	BEZ03(u)*p0[2]+BEZ13(u)*p1[2]+BEZ23(u)*p2[2]+BEZ33(u)*p3[2]];

The modules need a bit of work, because they're generating duplicate
points at the focal location, instead of combining the triangles into a
single polygon.





More information about the Discuss mailing list