langs a-z
This commit is contained in:
parent
db842d013d
commit
d066446780
11389 changed files with 98361 additions and 1020 deletions
|
|
@ -0,0 +1,52 @@
|
|||
/* Plot three circles. */
|
||||
|
||||
CIRCLE: PROCEDURE OPTIONS (MAIN);
|
||||
declare image (-20:20, -20:20) character (1);
|
||||
declare j fixed binary;
|
||||
|
||||
image = '.';
|
||||
image(0,*) = '-';
|
||||
image(*,0) = '|';
|
||||
image(0,0) = '+';
|
||||
|
||||
CALL DRAW_CIRCLE (0, 0, 11);
|
||||
CALL DRAW_CIRCLE (0, 0, 8);
|
||||
CALL DRAW_CIRCLE (0, 0, 19);
|
||||
|
||||
do j = hbound(image,1) to lbound(image,1) by -1;
|
||||
put skip edit (image(j,*)) (a(1));
|
||||
end;
|
||||
|
||||
draw_circle: procedure (x0, y0, radius); /* 14 May 2010. */
|
||||
declare ( x0, y0, radius ) fixed binary;
|
||||
declare ( ddfx, ddfy, x, y, f ) fixed binary;
|
||||
declare debug bit (1) aligned static initial ('0'b);
|
||||
|
||||
f = 1-radius;
|
||||
ddfx = 1;
|
||||
ddfy = -2*radius;
|
||||
x = 0;
|
||||
y = radius;
|
||||
image(x0, y0+radius) = '*'; /* Octet 0. */
|
||||
image(x0+radius, y0) = '*'; /* Octet 1. */
|
||||
image(x0, y0-radius) = '*'; /* Octet 2. */
|
||||
image(x0-radius, y0) = '*'; /* Octet 3. */
|
||||
|
||||
do while (x < y);
|
||||
if f >= 0 then
|
||||
do; y = y - 1; ddfy = ddfy +2; f = f + ddfy; end;
|
||||
x = x + 1;
|
||||
ddfx = ddfx + 2;
|
||||
f = f + ddfx;
|
||||
image(x0+x, y0+y) = '0'; /* Draws octant 0. */
|
||||
image(x0+y, y0+x) = '1'; /* Draws octant 1. */
|
||||
image(x0+y, y0-x) = '2'; /* Draws octant 2. */
|
||||
image(x0+x, y0-y) = '3'; /* Draws octant 3. */
|
||||
image(x0-x, y0-y) = '4'; /* Draws octant 4. */
|
||||
image(x0-y, y0-x) = '5'; /* Draws octant 5. */
|
||||
image(x0-y, y0+x) = '6'; /* Draws octant 6. */
|
||||
image(x0-x, y0+y) = '7'; /* Draws octant 7. */
|
||||
end;
|
||||
end draw_circle;
|
||||
|
||||
END CIRCLE;
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
....................|....................
|
||||
................2222*1111................
|
||||
.............222....|....111.............
|
||||
...........22.......|.......11...........
|
||||
..........2.........|.........1..........
|
||||
........22..........|..........11........
|
||||
.......3............|............0.......
|
||||
......2.............|.............1......
|
||||
.....3..............|..............0.....
|
||||
.....3...........222*111...........0.....
|
||||
....3..........22...|...11..........0....
|
||||
...3..........2.....|.....1..........0...
|
||||
...3........32....22*11....11........0...
|
||||
..3.........3...22..|..11...0.........0..
|
||||
..3........3...3....|....0...0........0..
|
||||
..3.......3...2.....|.....1...0.......0..
|
||||
.3........3..3......|......0..0........0.
|
||||
.3.......3...3......|......0...0.......0.
|
||||
.3.......3..3.......|.......0..0.......0.
|
||||
.3.......3..3.......|.......0..0.......0.
|
||||
-*-------*--*-------+-------*--*-------*-
|
||||
.4.......4..4.......|.......7..7.......7.
|
||||
.4.......4..4.......|.......7..7.......7.
|
||||
.4.......4...4......|......7...7.......7.
|
||||
.4........4..4......|......7..7........7.
|
||||
..4.......4...5.....|.....6...7.......7..
|
||||
..4........4...4....|....7...7........7..
|
||||
..4.........4...55..|..66...7.........7..
|
||||
...4........55....55*66....67........7...
|
||||
...4..........5.....|.....6..........7...
|
||||
....4..........55...|...66..........7....
|
||||
.....4...........555*666...........7.....
|
||||
.....4..............|..............7.....
|
||||
......5.............|.............6......
|
||||
.......4............|............7.......
|
||||
........55..........|..........66........
|
||||
..........5.........|.........6..........
|
||||
...........55.......|.......66...........
|
||||
.............555....|....666.............
|
||||
................5555*6666................
|
||||
....................|....................
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
Procedure rasterCircle(cx, cy, r, Color)
|
||||
;circle must lie completely within the image boundaries
|
||||
Protected f= 1 - r
|
||||
Protected ddF_X, ddF_Y = -2 * r
|
||||
Protected x, y = r
|
||||
|
||||
Plot(cx, cy + r, Color)
|
||||
Plot(cx, cy - r, Color)
|
||||
Plot(cx + r, cy, Color)
|
||||
Plot(cx - r, cy, Color)
|
||||
While x < y
|
||||
If f >= 0
|
||||
y - 1
|
||||
ddF_Y + 2
|
||||
f + ddF_Y
|
||||
EndIf
|
||||
x + 1
|
||||
ddF_X + 2
|
||||
f + ddF_X + 1
|
||||
Plot(cx + x, cy + y, Color)
|
||||
Plot(cx - x, cy + y, Color)
|
||||
Plot(cx + x, cy - y, Color)
|
||||
Plot(cx - x, cy - y, Color)
|
||||
Plot(cx + y, cy + x, Color)
|
||||
Plot(cx - y, cy + x, Color)
|
||||
Plot(cx + y, cy - x, Color)
|
||||
Plot(cx - y, cy - x, Color)
|
||||
Wend
|
||||
EndProcedure
|
||||
|
||||
OpenWindow(0, 0, 0, 100, 100, "MidPoint Circle Algorithm", #PB_Window_SystemMenu)
|
||||
CreateImage(0, 100, 100, 32)
|
||||
StartDrawing(ImageOutput(0))
|
||||
Box(0, 0, 100, 100, RGB(0, 0, 0))
|
||||
rasterCircle(25, 25, 20, RGB(255, 255, 255))
|
||||
rasterCircle(50, 50, 40, RGB(255, 0, 0))
|
||||
StopDrawing()
|
||||
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
|
||||
|
||||
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// Draw a circle using Bresenham's circle algorithm.
|
||||
// #21 = center x, #22 = center y; #23 = radius
|
||||
|
||||
:DRAW_CIRCLE:
|
||||
#30 = 1 - #23 // f
|
||||
#31 = 0 // ddF_x
|
||||
#32 = -2 * #23 // ddF_y
|
||||
#41 = 0 // x
|
||||
#42 = #23 // y
|
||||
|
||||
while (#41 <= #42) {
|
||||
#1 = #21+#41; #2 = #22+#42; Call("DRAW_PIXEL")
|
||||
#1 = #21-#41; #2 = #22+#42; Call("DRAW_PIXEL")
|
||||
#1 = #21+#41; #2 = #22-#42; Call("DRAW_PIXEL")
|
||||
#1 = #21-#41; #2 = #22-#42; Call("DRAW_PIXEL")
|
||||
#1 = #21+#42; #2 = #22+#41; Call("DRAW_PIXEL")
|
||||
#1 = #21-#42; #2 = #22+#41; Call("DRAW_PIXEL")
|
||||
#1 = #21+#42; #2 = #22-#41; Call("DRAW_PIXEL")
|
||||
#1 = #21-#42; #2 = #22-#41; Call("DRAW_PIXEL")
|
||||
if (#30 >= 0) {
|
||||
#42--
|
||||
#32 += 2
|
||||
#30 += #32
|
||||
}
|
||||
#41++
|
||||
#31 += 2
|
||||
#30 += #31 + 1
|
||||
}
|
||||
|
||||
return
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
include c:\cxpl\codes; \include 'code' declarations
|
||||
|
||||
proc Circle(X0, Y0, Radius, Color); \Display a circle
|
||||
int X0, Y0, \coordinates of center
|
||||
Radius, \radius in (pixels)
|
||||
Color; \line color
|
||||
int X, Y, E, U, V;
|
||||
|
||||
proc PlotOctants; \Segment
|
||||
[Point(X0+Y, Y0+X, Color); \ 0
|
||||
Point(X0+X, Y0+Y, Color); \ 1
|
||||
Point(X0-X, Y0+Y, Color); \ 2
|
||||
Point(X0-Y, Y0+X, Color); \ 3
|
||||
Point(X0-Y, Y0-X, Color); \ 4
|
||||
Point(X0-X, Y0-Y, Color); \ 5
|
||||
Point(X0+X, Y0-Y, Color); \ 6
|
||||
Point(X0+Y, Y0-X, Color); \ 7
|
||||
]; \PlotOctants
|
||||
|
||||
[X:= 0; Y:= Radius;
|
||||
U:= 1;
|
||||
V:= 1 -Radius -Radius;
|
||||
E:= 1 -Radius;
|
||||
while X < Y do
|
||||
[PlotOctants;
|
||||
if E < 0 then
|
||||
[U:= U+2; V:= V+2; E:= E+U]
|
||||
else [U:= U+2; V:= V+4; E:= E+V; Y:= Y-1];
|
||||
X:= X+1;
|
||||
];
|
||||
if X = Y then PlotOctants;
|
||||
]; \Circle
|
||||
|
||||
[SetVid($112); \640x480 in 24-bit RGB color
|
||||
Circle(110, 110, 50, $FFFF00);
|
||||
if ChIn(1) then []; \wait for keystroke
|
||||
SetVid(3); \restore normal text mode
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue