如何用Java2D复现这张图片?

编程语言 2026-07-10

我正在用Java2D尝试复现这张图,几乎已经完成,但有一个微小的差异。

在原图中,中心有四个圆相互重叠,但在我的输出中,中心没有重叠。

我到底哪里搞错了??

下面是它应该的样子:

参考图:由不同大小圆圈组成的无穷大风格图案

而这就是我看到的样子

图片

我只附上了我的代码中paintComponent部分,请告诉我是否应该把整份代码贴上来

public void paintComponent(Graphics g){ 
       super.paintComponent(g); 
       Graphics2D g2 = (Graphics2D) g; 

       g2.translate(200,200); 
       int scale = 60, max=8, nPoints = 60, minSize = 4; 

       for (int i = 0; i <nPoints; i++){ 
           double t = (i/(double)nPoints*Math.PI*2); 

           double x = (int)(Math.cos(t) * scale); 
           double y = (int)(Math.sin(t*2) * scale); 

           double s = minSize + max * (1 - Math.abs(y/scale)); 
           int size = (int)(s); 

           g2.draw(new RoundRectangle2D.Double(x-size/2, y-size/2,size,size,12,12)); 
       } 
}

解决方案

你现在只是画了一个圆,因为x 和y 使用了相同的频率。

尝试把其中一个改成不同的,例如:

double t = i * 2 * Math.PI / nPoints;
double x = Math.cos(t) * scale;
double y = Math.sin(2 * t) * scale;

这应该会让中心产生重叠。同时避免过早将其强制转换为 int,这可能会稍微改变形状。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章