I've put together a code sample, which could demonstrate the awesome power of D when it comes to getting good results very quickly and safely. Perhaps it could end up on display for newcomers:<div><br></div><div><div>import std.traits;</div>
<div><br></div><div>/// Returns the t-th point on the bezier curve, defined by non-empty set p of d-dimensional points, where t : [0, 1] and d > 1.</div><div>real[d] bezier(size_t d, Number)(Number[d][] p, Number t)</div>
<div>    if(d > 1 && isFloatingPoint!Number)</div><div>in</div><div>{</div><div>    assert(p.length > 0);</div><div>    assert(t >= 0.0L && t <= 1.0L);</div><div>}</div><div>body</div><div>{</div>
<div>    return p.length > 1 ? (1 - t) * p[0..$-1].bezier(t) + t * p[1..$].bezier(t) : p[0];</div><div>}</div><div><br></div><div>/// Returns k unidistant points on the bezier curve, defined by non-empty set p of d-dimensional points, where k > 0 and d > 1.</div>
<div>real[d][] bezier(size_t d, Number)(Number[d][] p, size_t k)</div><div>    if(d > 1 && isFloatingPoint!Number)</div><div>in</div><div>{</div><div>    assert(p.length > 0);</div><div>    assert(k > 0);</div>
<div>}</div><div>body</div><div>{</div><div>    Number[d][] result = new Number[d][k];</div><div>    foreach(i; 0..k)</div><div>        result[k] = p.bezier(i * (1.0L / k));</div><div>    return result;</div><div>}</div><div>
<br></div>-- <br>Bye,<br>Gor Gyolchanyan.<br>
</div>