Bitmap/Bresenham's line algorithm: Difference between revisions
Content added Content deleted
PatGarrett (talk | contribs) (→{{header|VBScript}}: Section added) |
(Added Commodore BASIC solution) |
||
Line 1,014: | Line 1,014: | ||
null |
null |
||
</lang> |
</lang> |
||
=={{header|Commodore Basic}}== |
|||
<lang CommodoreBasic> |
|||
10 rem bresenham line algorihm |
|||
20 rem translated from purebasic |
|||
30 x0=10 : rem start x co-ord |
|||
40 y0=15 : rem start y co-ord |
|||
50 x1=30 : rem end x co-ord |
|||
60 y1=20 : rem end y co-ord |
|||
70 se=0 : rem 0 = steep 1 = !steep |
|||
80 ns=25 : rem num segments |
|||
90 dim pt(ns,2) : rem points in line |
|||
100 sc=1024 : rem start of screen memory |
|||
110 sw=40 : rem screen width |
|||
120 sh=25 : rem screen height |
|||
130 pc=42 : rem plot character '*' |
|||
140 gosub 1000 |
|||
150 end |
|||
1000 rem plot line |
|||
1010 if abs(y1-y0)>abs(x1-x0) then se=1:tp=y0:y0=x0:x0=tp:tp=y1:y1=x1:x1=tp |
|||
1020 if x0>x1 then tp=x1:x1=x0:x0=tp:tp=y1:y1=y0:y0=tp |
|||
1030 dx=x1-x0 |
|||
1040 dy=abs(y1-y0) |
|||
1050 er=dx/2 |
|||
1060 y=y0 |
|||
1070 ys=-1 |
|||
1080 if y0<y1 then ys = 1 |
|||
1090 for x=x0 to x1 |
|||
1100 if se=1 then p0=y: p1=x:gosub 2000:goto 1120 |
|||
1110 p0=x: p1=y: gosub 2000 |
|||
1120 er=er-dy |
|||
1130 if er<0 then y=y+ys:er=er+dx |
|||
1140 next x |
|||
1150 return |
|||
2000 rem plot individual point |
|||
2010 rem p0 == plot point x |
|||
2020 rem p1 == plot point y |
|||
2030 sl=p0+(p1*40) |
|||
2040 rem make sure we dont write beyond screen memory |
|||
2050 if sl<(sw*sh) then poke sc+sl,pc |
|||
2060 return |
|||
</lang> |
|||
[https://www.worldofchris.com/assets/c64-bresenham-line.png C64 Example screenshot] |
|||
=={{header|Common Lisp}}== |
=={{header|Common Lisp}}== |