创建10.000连接的六角形页面?

编程入门 行业动态 更新时间:2024-10-24 04:34:41
本文介绍了创建10.000连接的六角形页面?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 我试图创建10.000六边形互相连接像蜜蜂combs.I想要创建所有这些作为一个元素后,我可以导入一些东西到里面他们。但是为了将六边形连接在一起,我的算法卡住后连接6元素。这是我在java中的算法。我在java中进行测试。 另外我想让它们的尺寸从连接之前缩小。

angle = 2 * Math.PI / 6 ; for(int i = 0; i <6; i ++){ double v = i * angle-(15); pentagon pent = new pentagon(6,60,a); a.x = a.x +(int)Math.round(105 * Math.cos(v)); a.y = a.y +(int)Math.round(105 * Math.sin(v)); pentagonList.add(pent);

这是我的五角大楼课程

import javax.swing。*; import java.awt。*; import java.awt.event。*; / ** * * @author Meko * / public class pentagon extends JPanel { private int n,r; 私人双角度; public int [] x,y; 点c; int posX,posY; public pentagon(int pieces,int radie,Point center){ c = center; n =件; r = radie; x = new int [n]; y = new int [n]; angle = 2 * Math.PI / n; posX = c.x + 1024/2; posY = c.y + 1024/2; $ b $ public void drawMe(Graphics g){ g.drawString(CENTER,posX,posY); //System.out.print(xO:+ x0); for(int i = 0; i< n; i ++){ double v = i * angle - (6 * 2 * Math.PI / 360)+ 15; x [i] = posX +(int)Math.round(r * Math.cos(v)); // System.out.print(x:+ x [i]); y [i] = posY +(int)Math.round(r * Math.sin(v)); g.drawString(+ i,x [i],y [i]); } g.drawPolygon(x,y,n); }

}

$ b $创建一个矩形网格是相当明显的 - 只是倾斜一个矩形网格(要么倾斜它,并得到一个平行四边形,然后使用模数来包装它,或歪斜交替的行/列创建一个矩形网格)。

创建一个填充六角形的六边形相当容易

  • 在第 n 个排名中,有6个 n 格
  • 因此,如果你有x& b的话,那么你可以使用这个x& b。b y坐标在两个数组中, polyX 和 polyY ,您得到一个嵌套循环:

    drawHex(g,cx,cy,0); (int bar = 0; bar <6; ++ bar){bb $ b(int rank = 1; rank 完整示例:

    import javax.swing。*; import java.awt。*; public class Hexagons { public static void main(String ... args)throws Exception { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run(){ new Hexagons()。run(); } }); Hexagons() { final JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JPanel panel = new JPanel(){ @Override public void paintComponent(Graphics g){ Graphics2D g2D =(Graphics2D)g; g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); drawHexes(g2D,getWidth()/ 2,getHeight()/ 2); } }; count = 5; frame.add(panel); frame.setSize(400,400); frame.setVisible(true); } void run(){} $ b $ int count; void drawHexes(Graphics2D g,int cx,int cy) { int count = Math.min(20,Math.min(cx,cy) / 34); drawHex(g,cx,cy,0); (int bar = 0; bar <6; ++ bar){bb $ b(int rank = 1; rank

    I am trying to create 10.000 hexagon connected each other like bee combs.I want to create all of this as a element that after I can import some thing to inside them.But for connecting hexagons together my algorithms stuck after connecting first 6 elements. Here is my algorithm in java. I made in java for testing . And inaddition I want to make them size smaller from before connected.

    angle= 2*Math.PI/6; for (int i=0 ;i<6;i++){ double v = i*angle-(15); pentagon pent = new pentagon(6, 60, a); a.x=a.x+(int)Math.round(105*Math.cos(v)); a.y=a.y+(int)Math.round(105*Math.sin(v)); pentagonList.add(pent);

    and this is my pentagon class

    import javax.swing.*; import java.awt.*; import java.awt.event.*; /** * * @author Meko */ public class pentagon extends JPanel { private int n, r; private double angle; public int[] x, y; Point c; int posX, posY; public pentagon(int pieces, int radie, Point center) { c = center; n = pieces; r = radie; x = new int[n]; y = new int[n]; angle = 2 * Math.PI / n; posX = c.x + 1024 / 2; posY = c.y + 1024 / 2; } public void drawMe(Graphics g) { g.drawString("CENTER", posX, posY); //System.out.print(" xO: "+x0); for (int i = 0; i < n; i++) { double v = i * angle - (6 * 2 * Math.PI / 360) + 15; x[i] = posX + (int) Math.round(r * Math.cos(v)); // System.out.print(" x: "+x[i]); y[i] = posY + (int) Math.round(r * Math.sin(v)); g.drawString("" + i, x[i], y[i]); } g.drawPolygon(x, y, n); }

    }

    解决方案

    Creating a rectangular grid is fairly obvious - just skew a rectangular grid ( either skew it all and get a parallelogram, then use modulo to wrap it, or skew alternate rows/columns to create a rectangular grid ).

    Creating a hexagon filled with hexagons is fairly easy too

    • in the n th rank, there are 6 bars of n hexes
    • the centres of adjacent hexes are displaced twice the distance of the midpoint of one of the faces to the centre

    So if you have the x & y co-ordinates of your hexes in two arrays, polyX and polyY, you get a nested loop:

    drawHex ( g, cx, cy, 0 ); for ( int rank = 1; rank < count; ++rank ) { for ( int bar = 0; bar < 6; ++bar ) { // x and y are twice midpoint of the previous face * the rank away // from centre int x = cx + ( polyX [ ( bar + 4 ) % 6 ] + polyX [ ( bar + 5 ) % 6 ] ) * rank; int y = cy + ( polyY [ ( bar + 4 ) % 6 ] + polyY [ ( bar + 5 ) % 6 ] ) * rank; // move by twice the distance of the midpoint of the next face each time int dx = polyX [ bar ] + polyX [ ( bar + 1 ) % 6 ]; int dy = polyY [ bar ] + polyY [ ( bar + 1 ) % 6 ]; for ( int hex = 0; hex < rank; ++hex ) { drawHex ( g, x, y, rank ); x += dx; y += dy; } } }

    Full example:

    import javax.swing.*; import java.awt.*; public class Hexagons { public static void main ( String...args ) throws Exception { SwingUtilities.invokeAndWait ( new Runnable () { @Override public void run () { new Hexagons().run(); } } ); } Hexagons () { final JFrame frame = new JFrame(); frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE ); final JPanel panel = new JPanel () { @Override public void paintComponent ( Graphics g ) { Graphics2D g2D = ( Graphics2D ) g; g2D.setRenderingHint ( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON ); drawHexes ( g2D, getWidth() / 2, getHeight() / 2 ); } }; count = 5; frame.add ( panel ); frame.setSize ( 400, 400 ); frame.setVisible ( true ); } void run () { } int count; void drawHexes ( Graphics2D g, int cx, int cy ) { int count = Math.min ( 20, Math.min ( cx, cy ) / 34 ); drawHex ( g, cx, cy, 0 ); for ( int rank = 1; rank < count; ++rank ) { for ( int bar = 0; bar < 6; ++bar ) { int x = ( polyX [ ( bar + 4 ) % 6 ] + polyX [ ( bar + 5 ) % 6 ] ) * rank; int y = ( polyY [ ( bar + 4 ) % 6 ] + polyY [ ( bar + 5 ) % 6 ] ) * rank; int dx = polyX [ bar ] + polyX [ ( bar + 1 ) % 6 ]; int dy = polyY [ bar ] + polyY [ ( bar + 1 ) % 6 ]; for ( int hex = 0; hex < rank; ++hex ) { drawHex ( g, cx + x, cy + y, rank ); x += dx; y += dy; } } } } static int polyX[] = { 20, 10, -10, -20, -10, 10 }; static int polyY[] = { 0, 17, 17, 0, -17, -17 }; static Color fill[] = new Color[20]; static Color line[] = new Color[20]; static BasicStroke stroke = new BasicStroke ( 1.5f ); // make it pretty static { for ( int rank = 0; rank < 20; ++rank ) { double theta0 = rank * 2 * Math.PI / 20; double theta1 = theta0 + Math.PI * 2.0/3.0; double theta2 = theta1 + Math.PI * 2.0/3.0; fill [ rank ] = new Color ( ( int ) ( 128 + 64 * Math.sin ( theta0 ) ), ( int ) ( 128 + 64 * Math.sin ( theta1 ) ), ( int ) ( 128 + 64 * Math.sin ( theta2 ) ) ); line [ rank ] = new Color ( ( int ) ( 64+ 32 * Math.sin ( theta0 ) ), ( int ) ( 64 + 32 * Math.sin ( theta1 ) ), ( int ) ( 64+ 32 * Math.sin ( theta2 ) ) ); } } void drawHex ( Graphics2D g, int cx, int cy, int rank ) { g.translate ( cx, cy ); g.setPaint ( fill [ rank ] ); g.fillPolygon ( polyX, polyY, 6 ); g.setColor ( line [ rank ] ); g.setStroke ( stroke ); g.drawPolygon ( polyX, polyY, 6 ); g.translate ( -cx, -cy ); } }

  • 更多推荐

    创建10.000连接的六角形页面?

    本文发布于:2023-11-30 02:43:38,感谢您对本站的认可!
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:页面

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!