programming-examples/java/Computer_Graphics/CircleColouring.java
2019-11-15 12:59:38 +01:00

111 lines
3.6 KiB
Java

/**
* <p>Überschrift: GDV aufg1</p>
* <p>Beschreibung: </p>
* <p>Copyright: Copyright (c) 2005</p>
* <p>Organisation: </p>
* @author Vanessa Fischer, Nikolas Isensee (Gruppe 23)
* @version 1.0
*/
import java.awt.*;
import java.awt.geom.*;
import javax.swing.JFrame;
public class CircleColouring
extends JFrame
{
public CircleColouring()
{
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void paint(Graphics g)
{
Graphics2D g2d = (Graphics2D) g;
//Verwendung von Antialiasing, um die Raender weniger ausgefranst
//erscheinen zu lassen
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
//Die Linien sollen eine Dicke von 1.5 statt 1.0 haben.
BasicStroke bs = new BasicStroke(1.0f);
g2d.setStroke(bs);
//Rot {Anfangswert, Zielwert}
int[] red =
{
172, 217
};
//Grün {Anfangswert, Zielwert}
int[] green =
{
3, 219
};
//Blau {Anfangswert, Zielwert}
int[] blue =
{
3, 17
};
//rgb-Matrix
int steps = 1440; //Anzahl Morph-Schritte
int[] re = new int[steps + 1];
int[] gr = new int[steps + 1];
int[] bl = new int[steps + 1];
float alpha;
float stepsDouble = steps;
float x, y, x2, y2;
int r = 100;
double winkel = 0;
x = (float) (r * Math.cos(winkel));
x2 = x + 20;
y = (float) (r * Math.sin(winkel));
y2 = (y * x2) / x;
Color color = new Color(red[0], green[0], blue[0]);
GeneralPath gp = new GeneralPath();
gp.moveTo(x, y);
gp.lineTo(x2, y2);
g2d.setColor(color);
g2d.draw(gp);
for (int i = 1; i <= steps; i++)
{
alpha = i / stepsDouble;
winkel = winkel + 0.125;
double winkel1 = winkel * Math.PI / 180;
re[i] = (int) ( (1 - alpha) * red[0] + alpha * red[1]);
gr[i] = (int) ( (1 - alpha) * green[0] + alpha * green[1]);
bl[i] = (int) ( (1 - alpha) * blue[0] + alpha * blue[1]);
Color c = new Color(re[i], gr[i], bl[i]);
g2d.setColor(c);
if (winkel <= 90)
{
x = (float) (Math.abs(r * Math.cos(winkel1))) + 150;
x2 = (float) (Math.abs( (r - 60) * Math.cos(winkel1))) + 150;
y = (float) (Math.abs(r * Math.sin(winkel1))) + 150;
y2 = (float) (Math.abs( (r - 60) * Math.sin(winkel1))) + 150;
}
else
{
x = (float) ( -1 * (Math.abs(r * Math.cos(winkel1))) + 150);
x2 = (float) ( -1 * (Math.abs( (r - 60) * Math.cos(winkel1))) + 150);
y = (float) (Math.abs(r * Math.sin(winkel1))) + 150;
y2 = (float) (Math.abs( (r - 60) * Math.sin(winkel1))) + 150;
}
GeneralPath gp1 = new GeneralPath();
gp1.moveTo(x, y);
gp1.lineTo(x2, y2);
g2d.setColor(c);
g2d.draw(gp1);
}
}
public static void main(String[] args)
{
CircleColouring a3 = new CircleColouring();
a3.setTitle("Farbkreis");
a3.setSize(400, 400);
a3.setVisible(true);
}
}