栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

创建10.000个连接的六边形页面?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

创建10.000个连接的六边形页面?

创建矩形网格非常明显-只需倾斜矩形网格(要么全部倾斜并获得平行四边形,然后使用模将其包装,要么倾斜交替的行/列以创建矩形网格)。

创建一个充满六边形的六边形也相当容易

  • 在第 n 个等级中,有6条 n 进制的条形
  • 相邻六边形的中心的位移是其中一个面的中点到中心的距离的两倍

因此,如果您在两个数组中都有十六进制的x和y坐标,

polyX
并且
polyY
,则会得到一个嵌套循环:

    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; }        }    }

完整示例:

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 );    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号