mirror of
https://github.com/opelly27/Java-N-Body-Simulation.git
synced 2026-05-20 02:47:37 +00:00
81 lines
2.7 KiB
Java
81 lines
2.7 KiB
Java
// A wrapper class for the buffered image object that adds functionality to
|
|
// draw shapes.
|
|
import java.awt.image.*;
|
|
import javax.swing.*;
|
|
import java.awt.*;
|
|
|
|
|
|
public class Canvas {
|
|
int height;
|
|
int width;
|
|
BufferedImage image;
|
|
private static JFrame frame;
|
|
private static JLabel label;
|
|
|
|
public static void main(String[] args){
|
|
Canvas test = new Canvas(500, 500, 255, 255, 255, 255);
|
|
int radius = 100;
|
|
int x = 250;
|
|
int y = 250;
|
|
int a = 255;
|
|
|
|
for(int i = 0; i < 50000; i++){
|
|
int r = (int) (Math.random() * 256);
|
|
int g = (int) (Math.random() * 256);
|
|
int b = (int) (Math.random() * 256);
|
|
test.drawSquare(radius, x, y, r, g, b, a);
|
|
test.display();
|
|
}
|
|
}
|
|
|
|
public Canvas(int height, int width, int r, int g, int b, int a){
|
|
this.height = height;
|
|
this.width = width;
|
|
this.image = new BufferedImage(height, width, BufferedImage.TYPE_INT_ARGB);
|
|
}
|
|
|
|
public void display(){
|
|
if(frame==null){
|
|
frame=new JFrame();
|
|
frame.setTitle("stained_image");
|
|
frame.setSize(image.getWidth(), image.getHeight());
|
|
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
|
|
label=new JLabel();
|
|
label.setIcon(new ImageIcon(image));
|
|
frame.getContentPane().add(label,BorderLayout.CENTER);
|
|
frame.setLocationRelativeTo(null);
|
|
frame.pack();
|
|
frame.setVisible(true);
|
|
}else label.setIcon(new ImageIcon(this.image));
|
|
}
|
|
|
|
public void setPixel(int x, int y, int r, int g, int b, int a){
|
|
int p = (a<<24) | (r<<16) | (g<<8) | b;
|
|
this.image.setRGB(x, y, p);
|
|
}
|
|
|
|
public void drawSquare(int radius, int x, int y, int r, int g, int b, int a){
|
|
if(x > this.height -15 || x < 15 || y > this.width - 15 || y < 15){
|
|
return;
|
|
}
|
|
for(int sign = 0; sign < 4; sign ++){
|
|
for(int offsetY = 0; offsetY < radius; offsetY ++){
|
|
for(int offsetX = 0; offsetX < radius; offsetX ++ ){
|
|
int xPoint = offsetX;
|
|
int yPoint = offsetY;
|
|
switch(sign){
|
|
case 0: xPoint = xPoint * - 1;
|
|
break;
|
|
case 1: yPoint = yPoint * -1;
|
|
break;
|
|
case 2: xPoint = xPoint * -1;
|
|
yPoint = yPoint * -1;
|
|
break;
|
|
}
|
|
this.setPixel(x + xPoint, y + yPoint, r, g, b, a);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|