因此,您的基本问题归结为“根据给定角度在圆上找到一个点”
一个快速的谷歌会找到像Find the coordinates of a point on a circle这样的资源,现在,坦率地说,我是个白痴,所以我会缩小搜索范围以包括Java,这会给我们像How to calculate the coordinates of points in a circle using Java?这样的东西 - 甜蜜。
所以基本计算可能看起来像
double xPosy = Math.cos(rads) * radius);
double yPosy = Math.sin(rads) * radius);
现在,这解决了您问题的核心方面。剩下的就是简单地绘制结果。请参阅 Performing Custom Painting 和 Painting in AWT and Swing 作为起点,并参阅 2D Graphics 以更详细地了解 API。
现在,综合以上所有内容,您最终可能会得到一个类似于...的解决方案
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.add(new TestPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g.create();
int midX = getWidth() / 2;
int midY = getHeight() / 2;
Dimension size = new Dimension(4, 4);
g2d.setColor(Color.BLACK);
for (int index = 0; index < 64; index++) {
double angle = (360d / 64d) * index;
Point2D poc = getPointOnCircle(angle, 100 - 4);
Rectangle2D box = new Rectangle2D.Double(midX + poc.getX() - 2, midY + poc.getY() - 2, size.width, size.height);
g2d.draw(box);
}
g2d.dispose();
}
protected Point2D getPointOnCircle(double degress, double radius) {
double rads = Math.toRadians(degress - 90); // 0 becomes the top
return new Point2D.Double(Math.cos(rads) * radius, Math.sin(rads) * radius);
}
}
}
所以,大约现在,您应该意识到我的“正方形”是正方形,而不是像您的“菱形”形状。这是你必须开始做一些工作的地方。
如果我正在处理这个问题,我可能会想创建一个自定义形状,或者对box 应用 45 度变换并平移它的位置以呈现它,或者只是将整个结果旋转 45 度,但是这会带来一大堆其他问题,具体取决于您想用它做什么