Java 可视化形状绘制工具 - 使用坐标点绘制多边形和圆弧
以下是使用Java编写的程序,可以按照给定的坐标顺序绘制多个可视化形状,并将它们绘制到一个窗口中。
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ShapeVisualization extends JFrame {
private List<String> shapes;
public ShapeVisualization(List<String> shapes) {
this.shapes = shapes;
setTitle('Shape Visualization');
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
@Override
public void paint(Graphics g) {
super.paint(g);
for (String shape : shapes) {
drawShape(g, shape);
}
}
private void drawShape(Graphics g, String shape) {
String[] coordinates = shape.split(';');
for (int i = 0; i < coordinates.length - 1; i++) {
String currentCoordinate = coordinates[i];
String nextCoordinate = coordinates[i + 1];
if (currentCoordinate.startsWith('(') && currentCoordinate.endsWith(')')) {
// Draw arc
String[] arcCoordinates = currentCoordinate.substring(1, currentCoordinate.length() - 1).split(',');
double x1 = Double.parseDouble(arcCoordinates[0].trim());
double y1 = Double.parseDouble(arcCoordinates[1].trim());
double x2 = Double.parseDouble(arcCoordinates[2].trim());
double y2 = Double.parseDouble(arcCoordinates[3].trim());
double x3 = Double.parseDouble(arcCoordinates[4].trim());
double y3 = Double.parseDouble(arcCoordinates[5].trim());
boolean clockwise = Boolean.parseBoolean(arcCoordinates[6].trim());
int x1Int = (int) (x1 * 100);
int y1Int = (int) (y1 * 100);
int x2Int = (int) (x2 * 100);
int y2Int = (int) (y2 * 100);
int x3Int = (int) (x3 * 100);
int y3Int = (int) (y3 * 100);
if (clockwise) {
g.drawArc(x1Int, y1Int, x2Int, y2Int, x3Int, y3Int);
} else {
g.drawArc(x1Int, y1Int, x2Int, y2Int, x3Int, -y3Int);
}
} else {
// Draw line
String[] currentCoordinates = currentCoordinate.split(',');
String[] nextCoordinates = nextCoordinate.split(',');
double x1 = Double.parseDouble(currentCoordinates[0].trim());
double y1 = Double.parseDouble(currentCoordinates[1].trim());
double x2 = Double.parseDouble(nextCoordinates[0].trim());
double y2 = Double.parseDouble(nextCoordinates[1].trim());
int x1Int = (int) (x1 * 100);
int y1Int = (int) (y1 * 100);
int x2Int = (int) (x2 * 100);
int y2Int = (int) (y2 * 100);
g.drawLine(x1Int, y1Int, x2Int, y2Int);
}
}
}
public static void main(String[] args) {
List<String> shapes = new ArrayList<>(Arrays.asList(
'0.000,6.000;0.000,0.000;32.639,0.000;32.639,6.069;0.000,10.069;(0.000,10.069;0.000,6.000;103.105,2.328;true);',
'0.000,6.000;0.000,0.000;32.639,0.000;32.639,6.069;0.000,10.069;(0.000,10.069;0.000,6.000;103.105,2.328;true);'
));
SwingUtilities.invokeLater(() -> new ShapeVisualization(shapes));
}
}
注意:由于该程序使用了Swing库进行图形绘制,因此建议在图形界面的主线程中运行该程序。上述代码的main方法已经做了相应的处理。
原文地址: http://www.cveoy.top/t/topic/o2Uk 著作权归作者所有。请勿转载和采集!