按网格顺序排列三角形

时间:2009-10-15 12:50:57

标签: java geometry

我的程序自动生成三角形,但三角形的排列在JPanel上是随机的。如何以网格顺序绘制三角形?感谢。

编辑:

for(int i = 0; i < 10; i++)    
{ 

  xCoord[0] = generator.nextInt(MAX_WIDTH);
  yCoord[0] = generator.nextInt(MAX_HEIGHT);

  xCoord[1] = (int) (xCoord[0] - xWidth);
  xCoord[2] = (int) (xCoord[1] + (xWidth/2));         

  yCoord[1] = yCoord[0];
  yCoord[2] = (int) (yCoord[1] - yHeight);  

  triangles.add( new Polygon(xCoord,yCoord, 3)); 
}

已编辑:输出期望

如何让程序生成多个模式,但必须是否为对称形式?例如左右是对称的。我试图制作Loop但到目前为止它只生成1个模式。请帮助: - (

*** ***      OR    **   **        OR  ***   ***    etc (as long as it is symmetrical)
*** ***            **   **             *     *
 *   *

2 个答案:

答案 0 :(得分:1)

看看my solution to your previous question

编辑:

修改上面链接中的示例,您可以将随机化的Polygon点替换为更加固定的点。在paintComponent方法中,您可以替换:

for (int j = 0; j < 3; j++) {
    xCoord[j] = generator.nextInt(maxCellWidth)
                    + (maxCellWidth * xMultiple);
    yCoord[j] = generator.nextInt(maxCellHeight)
                    + (maxCellHeight * yMultiple);
}

用这个:

xCoord[0] = (maxCellWidth/2) + (maxCellWidth * xMultiple);
// use the following if you need the points to be fixed as well.
//xCoord[0] = generator.nextInt(maxCellWidth) + (maxCellWidth * xMultiple);
yCoord[0] = 5 + (maxCellHeight * yMultiple);
xCoord[1] = 5 + (maxCellWidth * xMultiple);
yCoord[1] = maxCellHeight - 5 + (maxCellHeight * yMultiple);
xCoord[2] = maxCellWidth - 5 + (maxCellWidth * xMultiple);
yCoord[2] = maxCellHeight - 5 + (maxCellHeight * yMultiple);

为了好玩,取消注释xCoord [0]的第二个设置将使得随机点中的顶点沿着x轴,但三角形的底部两个点将是固定的并且它们之间具有恒定的距离。 / p>

alt text http://img127.imageshack.us/img127/5809/picture5v.png

答案 1 :(得分:0)

如果您的三角形的大小,形状和方向(或仅大约)不同,那么您可以将它们放置在一个精确的网格上,使它们具有“等距”间距的近似值。您可以尝试其他点,例如九点圆的中心,看看是否可以找到视觉上更令人愉悦的排列。

有关这些要点的更多信息,请参阅[维基百科关于三角形的文章] [1]。

[1]:http://en.wikipedia.org/wiki/Triangle“关于三角形的维基百科文章”