When doing contour fills to an arbitrary polygon or curve, things get really interesting when the contour curve (offset curve) intersects itself.
If you start each contour with the base polygon or curve having a specific direction (say, counterclockwise), then you only need to remove the parts of the contour curve that are drawn in the other direction (between intersection points; or the entire contour curve, if there are no self-intersections).
Another way is to test a single point in the contour curve (for the entire contour if no self-intersections, or a point per segment between two consecutive self-intersections) for the distance to the base polygon or curve. If the distance is less than the contour offset, then one removes that contour curve segment.
At one point, I worked out the math needed for offsetting vinyl cutter blades for polygon shapes. (The blade drags behind the actual device point/head, but rotates freely.)
I even wrote a script in Awk to do that for HPGL input and output, and it is used with a certain vinyl cutting software. (The author is a friend, who I haven't been able to contact at all in a year and a half; about a third of a world away.)
For just drawing this kind of stuff, I warmly recommend Inkscape. (Any other vector graphics application works fine, though.)
They all tend to use piecewise cubic Bézier curves for, well, curves; because that is the one that tends to be accelerated and widely used, from PostScript to SVG.
Obviously, there you can simply choose how you wish to stroke the curve. The easiest way to control the shape of the circle/ellipse of the stroking "pen", is to simply do it with a circular pen and then scale the rectangular region containing the curve to match the circle aspect ratio. If the stroke shape is angled, rotate the curve first by the stroke angle in the opposite direction, then scale, and then rotate back.
If one wanted to do this in SVG by hand, the coordinates are not difficult to calculate. The only thing is to how to split the sine curve into cubic Béziers: quarter or half-waves, or something else. The definition of the "best" approximation is the difficult thing, because one can measure the deviation in several different ways: most commonly the deviation is only measured along one axis only (since that then corresponds to the error of a single variable function at that point), but distance (numerically) or distance squared (linear least squares fitting) can also be used. Since the SVG format internally supports linear transformations on a per-element basis, one could trivially support circular or ellipse shaped stroke "pens" at different stroke angles and radiuses.