Bitmap/Bézier curves/Quadratic: Difference between revisions
Content added Content deleted
(Added PicoLisp) |
(Added BBC BASIC) |
||
Line 54: | Line 54: | ||
</pre> |
</pre> |
||
=={{header|BBC BASIC}}== |
|||
{{works with|BBC BASIC for Windows}} |
|||
[[Image:bezierquad_bbc.gif|right]] |
|||
<lang bbcbasic> Width% = 200 |
|||
Height% = 200 |
|||
REM Set window size: |
|||
VDU 23,22,Width%;Height%;8,16,16,128 |
|||
REM Draw quadratic Bézier curve: |
|||
PROCbezierquad(10,100, 250,270, 150,20, 20, 0,0,0) |
|||
END |
|||
DEF PROCbezierquad(x1,y1,x2,y2,x3,y3,n%,r%,g%,b%) |
|||
LOCAL i%, t, t1, a, b, c, p{()} |
|||
DIM p{(n%) x%,y%} |
|||
FOR i% = 0 TO n% |
|||
t = i% / n% |
|||
t1 = 1 - t |
|||
a = t1^2 |
|||
b = 2 * t * t1 |
|||
c = t^2 |
|||
p{(i%)}.x% = INT(a * x1 + b * x2 + c * x3 + 0.5) |
|||
p{(i%)}.y% = INT(a * y1 + b * y2 + c * y3 + 0.5) |
|||
NEXT |
|||
FOR i% = 0 TO n%-1 |
|||
PROCbresenham(p{(i%)}.x%,p{(i%)}.y%,p{(i%+1)}.x%,p{(i%+1)}.y%, \ |
|||
\ r%,g%,b%) |
|||
NEXT |
|||
ENDPROC |
|||
DEF PROCbresenham(x1%,y1%,x2%,y2%,r%,g%,b%) |
|||
LOCAL dx%, dy%, sx%, sy%, e |
|||
dx% = ABS(x2% - x1%) : sx% = SGN(x2% - x1%) |
|||
dy% = ABS(y2% - y1%) : sy% = SGN(y2% - y1%) |
|||
IF dx% < dy% e = dx% / 2 ELSE e = dy% / 2 |
|||
REPEAT |
|||
PROCsetpixel(x1%,y1%,r%,g%,b%) |
|||
IF x1% = x2% IF y1% = y2% EXIT REPEAT |
|||
IF dx% > dy% THEN |
|||
x1% += sx% : e -= dy% : IF e < 0 e += dx% : y1% += sy% |
|||
ELSE |
|||
y1% += sy% : e -= dx% : IF e < 0 e += dy% : x1% += sx% |
|||
ENDIF |
|||
UNTIL FALSE |
|||
ENDPROC |
|||
DEF PROCsetpixel(x%,y%,r%,g%,b%) |
|||
COLOUR 1,r%,g%,b% |
|||
GCOL 1 |
|||
LINE x%*2,y%*2,x%*2,y%*2 |
|||
ENDPROC</lang> |
|||
=={{header|C}}== |
=={{header|C}}== |
||