Bitmap/Bézier curves/Cubic: Difference between revisions

Content added Content deleted
(Added Wren)
Line 892: Line 892:
>> disp(img)
>> disp(img)
</lang>
</lang>

=={{header|Nim}}==
{{Trans|Ada}}
We use module “bitmap” for bitmap management and module “bresenham” to draw segments.
<lang Nim>import bitmap
import bresenham
import lenientops

proc drawCubicBezier*(
image: var Image; pt1, pt2, pt3, pt4: Point; color: Color; nseg: Positive = 20) =

var points = newSeq[Point](nseg + 1)

for i in 0..nseg:
let t = i / nseg
let u = (1 - t) * (1 - t)
let a = (1 - t) * u
let b = 3 * t * u
let c = 3 * (t * t) * (1 - t)
let d = t * t * t

points[i] = (x: (a * pt1.x + b * pt2.x + c * pt3.x + d * pt4.x).toInt,
y: (a * pt1.y + b * pt2.y + c * pt3.y + d * pt4.y).toInt)

for i in 1..points.high:
image.drawLine(points[i - 1], points[i], color)

#———————————————————————————————————————————————————————————————————————————————————————————————————

when isMainModule:
var img = initImage(16, 16)
img.fill(White)
img.drawCubicBezier((0, 15), (3, 0), (15, 2), (10, 14), Black)
img.print</lang>

{{out}}
<pre>................
................
................
................
.......HH.......
.....HH..HH.....
....H......H....
....H......H....
...H.......H....
..H........H....
.H.........H....
.H.........H....
.H.........H....
.H.........H....
H.........H.....
H...............</pre>


=={{header|OCaml}}==
=={{header|OCaml}}==