用Java写一个输入一个List集合集合中包含多个字符串每个字符串中包含多个xy坐标每个坐标之间以;分隔开如果是圆弧则用括号括起来内部以此为三个点坐标和一个Boolean值:起点、终点、圆心以及是否顺时针最后一个坐标点要与第一个坐标点相连该程序能按坐标顺序画出多个可视化形状要将多个形状绘制到一个窗口中坐标能支持三位小数。例如输入:00006000;00000000;326390000;326396
以下是使用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方法已经做了相应的处理
原文地址: https://www.cveoy.top/t/topic/hz7Z 著作权归作者所有。请勿转载和采集!