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

Content deleted Content added
add Tcl
Line 255:
 
=={{header|Tcl}}==
See [[Cubic bezier curves#Tcl]] for a generalized solution.
<lang tcl>proc x p {lindex $p 0}
proc y p {lindex $p 1}
 
proc drawBezier {img colour p0 p1 p2} {
# ensure the 3 points are increasing along the x-axis
lassign [lsort -real -index 0 [list $p0 $p1 $p2]] p0 p1 p2
# the quadratic Bezier function
set b {{t p0 p1 p2} {expr {$p0*(1-$t)**2 + $p1*2*$t*(1-$t) + $p2*$t**2}}}
set span [expr {[x $p2] - [x $p0]}]
set prev $p0
set increment 2
for {set x [expr {[x $p0] + $increment}]} {$x <= [x $p2]} {incr x $increment} {
set t [expr {1.0 * ($x - [x $p0]) / ([x $p2] - [x $p0])}]
set y [::tcl::mathfunc::round [apply $b $t [y $p0] [y $p1] [y $p2]]]
drawLine $img $colour $prev [list $x $y]
set prev [list $x $y]
}
}
 
set size 400
set bez [newImage $size $size]
label .l -image $bez
pack .l
 
fill $bez white
set p0 [list 50 [expr {int($size*rand())}]]
set p1 [list 240 [expr {int($size*rand())}]]
set p2 [list 350 [expr {int($size*rand())}]]
drawCircle $bez red $p0 3
drawCircle $bez red $p1 3
drawCircle $bez red $p2 3
 
drawBezier $bez blue $p0 $p1 $p2</lang>
 
=={{header|Vedit macro language}}==