循环打包-java
我的任务是画一个圆圈,然后在不接触边的情况下用最多的圆圈填充。我可以画这个圆,我可以用六边形/蜂窝状的格式来包装这个圆,但是我不能控制它们是在圆的内部还是外部 我用过这个:g.drawOval(50,50,300,300);指定我的圆。因为我实际上指定了一个正方形作为边界,所以我不能确定圆的边界在哪里。所以我基本上是把正方形填满圆圈,而不是把圆形填满 能给我指一下正确的方向吗?我是java新手,所以不确定我是否用了完全错误的方法。我的代码如下。我有另一个类用于框架,另一个类中包含main循环打包-java,java,swing,math,packing,Java,Swing,Math,Packing,我的任务是画一个圆圈,然后在不接触边的情况下用最多的圆圈填充。我可以画这个圆,我可以用六边形/蜂窝状的格式来包装这个圆,但是我不能控制它们是在圆的内部还是外部 我用过这个:g.drawOval(50,50,300,300);指定我的圆。因为我实际上指定了一个正方形作为边界,所以我不能确定圆的边界在哪里。所以我基本上是把正方形填满圆圈,而不是把圆形填满 能给我指一下正确的方向吗?我是java新手,所以不确定我是否用了完全错误的方法。我的代码如下。我有另一个类用于框架,另一个类中包含main imp
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class DrawCircle extends JPanel
{
private int width, height, diameter;
public DrawFrame d;
public DrawCircle()
{
width = 400;
height = 400;
diameter = 300;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(Color.blue);
g.drawOval(50, 50, 300, 300);
for(int i=50; i<200; i=i+20)
{
for(int j=50; j<350; j=j+10)
{
g.drawOval(j, i, 10, 10);
}
}
for(int i=60; i<200; i=i+20)
{
for(int j=55; j<350; j=j+10)
{
g.drawOval(j, i, 10, 10);
}
}
for(int i=330; i>190; i=i-20)
{
for(int j=340; j>40; j=j-10)
{
g.drawOval(j, i, 10, 10);
}
}
for(int i=340; i>190; i=i-20)
{
for(int j=345; j>40; j=j-10)
{
g.drawOval(j, i, 10, 10);
}
}
}
}
import java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
类DrawCircle扩展了JPanel
{
专用int宽度、高度、直径;
公共抽油机d;
公众圈子()
{
宽度=400;
高度=400;
直径=300;
}
公共组件(图形g)
{
超级组件(g);
g、 setColor(Color.blue);
g、 drawOval(50,50,300,300);
对于(int i=50;i40;j=j-10)
{
g、 drawOval(j,i,10,10);
}
}
}
}
所有这些神奇的数字让我有点畏缩。您是Java新手,这是一个家庭作业,所以我理解您为什么要这么做,但如果您将来做很多编程,我不推荐您这么做
你需要一个算法或配方来决定什么时候里面的一个小圆落在你要打包的大圆的外面。考虑一下你可能会采用的方法:
也许思考这个问题的另一种方式是想象一个二维排列的圆,以最接近的排列排列,在x和y方向上延伸到无穷远。现在,取你的封闭圆,将其置于二维排列的顶部,并消除所有与大圆重叠的圆。我不知道这是否是最优的,但很容易想象。谢谢。我通常不使用魔法数字,但我只是想先让它发挥作用,然后再修改它们。我真的想过你怎么想的,只是不知道该怎么做。既然你提到了,我真不敢相信我没看见。我在寻找更难的东西,同时想知道哪些库函数可能是我不知道的。很好,JR。少担心库,多担心你的问题。你的大脑是你拥有的最好的工具。如果你能把它写在纸上,你就可以指导计算机做什么。我相信你会很快解决的。