   pathString = "M " + firstPoint + sectionStrings.join('') + " Z"
   $("#star").attr("d", pathString);
 
+drawCubicStar = () ->
+  innerPoints = calculateInnerPoints()
+  outerPoints = calculateOuterPoints()
+  [controlPoints1, controlPoints2] = calculateControlPoints(innerPoints, outerPoints)
+
+  firstPoint = pointAsString(innerPoints[0])
+  innerPoints.push(innerPoints.shift())
+  points = _.zip(controlPoints1.map(pointAsString), controlPoints2.map(pointAsString), innerPoints.map(pointAsString))
+
+  sectionStrings = points.map ([control1, control2, inner]) ->
+    " C #{ control1 } #{ control2 } #{ inner }"
+
+  pathString = "M #{ firstPoint } " + sectionStrings.join('') + " Z"
+  $("#star").attr("d", pathString)
+
 
 drawStarWithCircularTips = () ->
   innerPoints = calculateInnerPoints()

outerPointStrings = () ->
  calculateOuterPoints().map pointAsString

calculateIntermediatePoints = (innerPoints, outerPoints, percentage) ->
  fullDistance = calculateDistance(innerPoints[0], outerPoints[0])
  straightDistance = (percentage / 100) * fullDistance
  angles = _.zip(innerPoints, outerPoints).map ([innerPoint, outerPoint]) -> calculateAngle(innerPoint, outerPoint)

  $("#star").attr("d", pathString);

drawStarWithCubicTips = () ->
  if $straightPercentage.val() == "0"
    drawCubicStar()
    return

  innerPoints = calculateInnerPoints()
  outerPoints = calculateOuterPoints()
  [intermediatePoints1, intermediatePoints2] = calculateLineToCurveTransitionPoints(innerPoints, outerPoints)
  [controlPoints1, controlPoints2] = calculateControlPointsFromIntermediate(intermediatePoints1, intermediatePoints2, outerPoints)

  points = _.zip(innerPoints.map(pointAsString), intermediatePoints1.map(pointAsString), controlPoints1.map(pointAsString), controlPoints2.map(pointAsString), intermediatePoints2.map(pointAsString))

