Another update from ingydotnet^djgoku
This commit is contained in:
parent
91df62d461
commit
948b86eafa
7604 changed files with 108452 additions and 22726 deletions
77
Task/Voronoi-diagram/Java/voronoi-diagram.java
Normal file
77
Task/Voronoi-diagram/Java/voronoi-diagram.java
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.geom.Ellipse2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import javax.swing.JFrame;
|
||||
|
||||
public class Voronoi extends JFrame {
|
||||
static double p = 3;
|
||||
static BufferedImage I;
|
||||
static int px[], py[], color[], cells = 100, size = 1000;
|
||||
|
||||
public Voronoi() {
|
||||
super("Voronoi Diagram");
|
||||
setBounds(0, 0, size, size);
|
||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||
int n = 0;
|
||||
Random rand = new Random();
|
||||
I = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);
|
||||
px = new int[cells];
|
||||
py = new int[cells];
|
||||
color = new int[cells];
|
||||
for (int i = 0; i < cells; i++) {
|
||||
px[i] = rand.nextInt(size);
|
||||
py[i] = rand.nextInt(size);
|
||||
color[i] = rand.nextInt(16777215);
|
||||
|
||||
}
|
||||
for (int x = 0; x < size; x++) {
|
||||
for (int y = 0; y < size; y++) {
|
||||
n = 0;
|
||||
for (byte i = 0; i < cells; i++) {
|
||||
if (distance(px[i], x, py[i], y) < distance(px[n], x, py[n], y)) {
|
||||
n = i;
|
||||
|
||||
}
|
||||
}
|
||||
I.setRGB(x, y, color[n]);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Graphics2D g = I.createGraphics();
|
||||
g.setColor(Color.BLACK);
|
||||
for (int i = 0; i < cells; i++) {
|
||||
g.fill(new Ellipse2D .Double(px[i] - 2.5, py[i] - 2.5, 5, 5));
|
||||
}
|
||||
|
||||
try {
|
||||
ImageIO.write(I, "png", new File("voronoi.png"));
|
||||
} catch (IOException e) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void paint(Graphics g) {
|
||||
g.drawImage(I, 0, 0, this);
|
||||
}
|
||||
|
||||
static double distance(int x1, int x2, int y1, int y2) {
|
||||
double d;
|
||||
d = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); // Euclidian
|
||||
// d = Math.abs(x1 - x2) + Math.abs(y1 - y2); // Manhattan
|
||||
// d = Math.pow(Math.pow(Math.abs(x1 - x2), p) + Math.pow(Math.abs(y1 - y2), p), (1 / p)); // Minkovski
|
||||
return d;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
new Voronoi().setVisible(true);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue