September 2017 Update
This commit is contained in:
parent
bba7bfd280
commit
ba8067c3b7
14570 changed files with 153136 additions and 63871 deletions
|
|
@ -0,0 +1,60 @@
|
|||
// version 1.1.4-3
|
||||
|
||||
import java.awt.Color
|
||||
import java.awt.Graphics
|
||||
import java.awt.image.BufferedImage
|
||||
import javax.swing.JOptionPane
|
||||
import javax.swing.JLabel
|
||||
import javax.swing.ImageIcon
|
||||
|
||||
class BasicBitmapStorage(width: Int, height: Int) {
|
||||
val image = BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR)
|
||||
|
||||
fun fill(c: Color) {
|
||||
val g = image.graphics
|
||||
g.color = c
|
||||
g.fillRect(0, 0, image.width, image.height)
|
||||
}
|
||||
|
||||
fun setPixel(x: Int, y: Int, c: Color) = image.setRGB(x, y, c.getRGB())
|
||||
|
||||
fun getPixel(x: Int, y: Int) = Color(image.getRGB(x, y))
|
||||
}
|
||||
|
||||
fun drawCircle(bbs: BasicBitmapStorage, centerX: Int, centerY: Int, radius: Int, circleColor: Color) {
|
||||
var d = (5 - radius * 4) / 4
|
||||
var x = 0
|
||||
var y = radius
|
||||
|
||||
do {
|
||||
with(bbs) {
|
||||
setPixel(centerX + x, centerY + y, circleColor)
|
||||
setPixel(centerX + x, centerY - y, circleColor)
|
||||
setPixel(centerX - x, centerY + y, circleColor)
|
||||
setPixel(centerX - x, centerY - y, circleColor)
|
||||
setPixel(centerX + y, centerY + x, circleColor)
|
||||
setPixel(centerX + y, centerY - x, circleColor)
|
||||
setPixel(centerX - y, centerY + x, circleColor)
|
||||
setPixel(centerX - y, centerY - x, circleColor)
|
||||
}
|
||||
if (d < 0) {
|
||||
d += 2 * x + 1
|
||||
}
|
||||
else {
|
||||
d += 2 * (x - y) + 1
|
||||
y--
|
||||
}
|
||||
x++
|
||||
}
|
||||
while (x <= y)
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val bbs = BasicBitmapStorage(400, 400)
|
||||
bbs.fill(Color.pink)
|
||||
drawCircle(bbs, 200, 200, 100, Color.black)
|
||||
drawCircle(bbs, 200, 200, 50, Color.white)
|
||||
val label = JLabel(ImageIcon(bbs.image))
|
||||
val title = "Bresenham's circle algorithm"
|
||||
JOptionPane.showMessageDialog(null, label, title, JOptionPane.PLAIN_MESSAGE)
|
||||
}
|
||||
|
|
@ -1,52 +0,0 @@
|
|||
/* 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;
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
....................|....................
|
||||
................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,16 @@
|
|||
fcn circle(x0,y0,r,rgb){
|
||||
x:=r; y:=0; radiusError:=1-x;
|
||||
while(x >= y){
|
||||
__sSet(rgb, x + x0, y + y0);
|
||||
__sSet(rgb, y + x0, x + y0);
|
||||
__sSet(rgb,-x + x0, y + y0);
|
||||
__sSet(rgb,-y + x0, x + y0);
|
||||
self[-x + x0, -y + y0]=rgb; // or do it this way, __sSet gets called as above
|
||||
self[-y + x0, -x + y0]=rgb;
|
||||
self[ x + x0, -y + y0]=rgb;
|
||||
self[ y + x0, -x + y0]=rgb;
|
||||
y+=1;
|
||||
if (radiusError<0) radiusError+=2*y + 1;
|
||||
else{ x-=1; radiusError+=2*(y - x + 1); }
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ppm:=PPM(200,200,0xFF|FF|FF);
|
||||
ppm.circle(100,100,40,00); // black circle
|
||||
ppm.circle(100,100,80,0xFF|00|00); // red circle
|
||||
|
||||
ppm.write(File("foo.ppm","wb"));
|
||||
Loading…
Add table
Add a link
Reference in a new issue