
在计算机图形学中,绘制几何图形是一项基础且重要的技能。本文将介绍如何使用Java实现五角星的绘制,分别通过图形界面(GUI)和控制台两种不同的方式。这两种方法展示了Java在图形处理方面的灵活性,也是学习Java编程和算法思维的绝佳案例。


通过学习这两个示例,你将掌握:
这个方法使用Java的Swing和AWT库来创建一个图形窗口,并在窗口中绘制一个红色的五角星。
import javax.swing.*;
import java.awt.*;
public class Demo4 extends JFrame {
public Demo4() {
setTitle("Star Drawing");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(Color.RED);
int centerX = getWidth() / 2;
int centerY = getHeight() / 2;
int radius = 100;
int[] xPoints = new int[10];
int[] yPoints = new int[10];
for (int i = 0; i < 10; i++) {
double angle = Math.PI / 2 - i * 2 * Math.PI / 10;
int currentRadius = (i % 2 == 0) ? radius : radius / 2;
xPoints[i] = (int) (centerX + currentRadius * Math.cos(angle));
yPoints[i] = (int) (centerY - currentRadius * Math.sin(angle));
}
g2d.fillPolygon(xPoints, yPoints, 10);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new Demo4();
});
}
}核心算法说明:
这个方法在控制台中使用字符(‘*’)绘制五角星,展示了如何在没有图形界面的情况下实现图形绘制。
public class Demo5 {
public static void main(String[] args) {
int size = 20;
char[][] screen = new char[size][size];
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
screen[i][j] = ' ';
}
}
int centerX = size / 2;
int centerY = size / 2;
int outerRadius = size / 2 - 2;
int innerRadius = outerRadius / 2;
int[][] points = new int[10][2];
for (int i = 0; i < 10; i++) {
double angle = Math.PI / 2 - i * 2 * Math.PI / 10;
int currentRadius = (i % 2 == 0) ? outerRadius : innerRadius;
points[i][0] = (int) (centerX + currentRadius * Math.cos(angle));
points[i][1] = (int) (centerY - currentRadius * Math.sin(angle));
}
for (int i = 0; i < 10; i++) {
int nextIndex = (i + 1) % 10;
drawLine(screen, points[i][0], points[i][1], points[nextIndex][0], points[nextIndex][1], '*');
}
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(screen[i][j]);
}
System.out.println();
}
}
private static void drawLine(char[][] screen, int x1, int y1, int x2, int y2, char c) {
int dx = Math.abs(x2 - x1);
int dy = Math.abs(y2 - y1);
int sx = x1 < x2 ? 1 : -1;
int sy = y1 < y2 ? 1 : -1;
int err = dx - dy;
while (true) {
if (x1 >= 0 && y1 >= 0 && x1 < screen.length && y1 < screen[0].length) {
screen[y1][x1] = c;
}
if (x1 == x2 && y1 == y2) {
break;
}
int e2 = 2 * err;
if (e2 > -dy) {
err -= dy;
x1 += sx;
}
if (e2 < dx) {
err += dx;
y1 += sy;
}
}
}
}核心算法说明:
javac Demo4.javajava Demo4javac Demo5.javajava Demo5通过这两个五角星绘制的例子,我们可以看到Java在图形处理方面的多样性和灵活性。GUI方法使用Java Swing提供了更美观、交互性更强的图形界面,而控制台方法则展示了如何在资源受限的环境中实现图形绘制。
这两种方法虽然实现方式不同,但核心算法思想是相似的:计算五角星的顶点坐标,然后将这些点连接起来。这种"数学模型+图形渲染"的思路是计算机图形学的基本方法,也是解决许多图形问题的通用思路。
无论是哪种方法,都体现了编程中的重要原则:问题分解、算法选择和数据结构应用。通过学习这些例子,不仅可以掌握具体的图形绘制技术,还能提升整体的编程思维和解决问题的能力。