Re: Calculating Control Points For Bsplines

Bernhard Fischer <[email protected]>
Newsgroups gmane.comp.lib.cairo
Message-ID <9124004.vSKVx5GaRG@winnie>
On Saturday 12 December 2015 22:46:17 Lawrence D'Oliveiro wrote:
> On Sat, 12 Dec 2015 08:25:30 +0100, Bernhard Fischer wrote:
> > I wrote an article about calculating control points for Bsplines
> > (based on polygons) and a sample program.
> 
> Always interested to see how people use geometrical calculations
> together with Cairo. Just some points:
> 
> I had to deal with the same issue of calculating half the
> difference between two angles in this
> <https://github.com/ldo/qahirah_examples/blob/master/pattern_dash>
> piece of example code (output here
> <http://default-cube.deviantart.com/art/Pattern-Dash-576369003>),
> while avoiding discontinuities around 0°. The calculation I came up with
> was basically
> 
>     ((angle2 - angle1 + π) mod 2π - π) ÷ 2

That's why I do not divide the angles like this (I did that in an earlier 
variant). I calculate the end points of an intermediate line and then 
determine the angle of this. It eliminates the need for handling of special 
cases.

> Also, C, like most IEEE-754-compliant languages, has a built-in function
> for calculating Euclidean distance. Instead of
> 
>     s = sqrt(pow(a, 2) + pow(b, 2))
> 
> why not just write
> 
>     s = hypot(a, b)

Thanks, I know that function but forgot about it. I'll change it.

> Another idea is, when averaging the angles at the corners, why not
> weight the contributions from the adjacent line segments according to
> their relative lengths? So shorter segments will produce sharper curves.

Well, there is no perfect solution. I implemented some variants and every 
variant creates a specific appearance of the curve. I chose the one as 
implemented in my demo program to fit best to my needs.
I use this variant in my chart renderer Smrender. The following example have 
the coastline and the depth contour lines rendered with this curve style:

http://www.abenteuerland.at/download/smrender/samples/murter.pdf


Best regards,
Bernhard

-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.