Bitmap/Bézier curves/Cubic: Difference between revisions
Content added Content deleted
(Added BBC BASIC) |
|||
Line 115: | Line 115: | ||
000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff |
||
</pre> |
</pre> |
||
=={{header|BBC BASIC}}== |
|||
{{works with|BBC BASIC for Windows}} |
|||
[[Image:beziercubic_bbc.gif|right]] |
|||
<lang bbcbasic> Width% = 200 |
|||
Height% = 200 |
|||
REM Set window size: |
|||
VDU 23,22,Width%;Height%;8,16,16,128 |
|||
REM Draw cubic Bézier curve: |
|||
PROCbeziercubic(160,150, 10,120, 30,0, 150,50, 20, 0,0,0) |
|||
END |
|||
DEF PROCbeziercubic(x1,y1,x2,y2,x3,y3,x4,y4,n%,r%,g%,b%) |
|||
LOCAL i%, t, t1, a, b, c, d, p{()} |
|||
DIM p{(n%) x%,y%} |
|||
FOR i% = 0 TO n% |
|||
t = i% / n% |
|||
t1 = 1 - t |
|||
a = t1^3 |
|||
b = 3 * t * t1^2 |
|||
c = 3 * t^2 * t1 |
|||
d = t^3 |
|||
p{(i%)}.x% = INT(a * x1 + b * x2 + c * x3 + d * x4 + 0.5) |
|||
p{(i%)}.y% = INT(a * y1 + b * y2 + c * y3 + d * y4 + 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}}== |