【问题标题】:How to fix regular polygons如何修复正多边形
【发布时间】:2019-08-06 22:45:20
【问题描述】:

我在 java 图形中绘制具有多个边的多边形。我的算法只有在涉及少数方面时才能正常工作。例如多边形的边数超过 50 条时如何解决?

    // PolygonsGUI. The value represents the number of sides of the polygon - Xiao 2019
    int x0 = dim.width / 2;
    int y0 = dim.height / 2;
    int r = Math.min(x0, y0) - 2 * gap;

    int[] xx = new int[value];
    int[] yy = new int[value];

    for (int i = 0; i < value; i++) {
        Double a = i * (Math.toRadians(360 / (double)value));
        xx[i] = (int) (x0 + (r * Math.sin(a)));
        yy[i] = (int) (y0 + (r * Math.cos(a)));
    }

    g.drawPolygon(xx, yy, value);

【问题讨论】:

  • 它“停止工作”的边数是多少? “停止工作”是什么意思?
  • 不是 JAVA 编码器,但您确定 sin,cos 需要角度而不是弧度吗?

标签: java graphics polygon


【解决方案1】:

您的程序运行良好。我从中心画线到多边形上的每个点以显示半径。可能问题出在代码的其他地方。

import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class PolygonDemo extends JPanel {
   JFrame frame  = new JFrame();
   int    width  = 500;
   int    height = 500;
   int    gap    = 20;
   int    value  = 50;
   int[]  xx     = new int[value];
   int[]  yy     = new int[value];
   int    x0     = width / 2;
   int    y0     = height / 2;

   public PolygonDemo() {
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(this);
      setPreferredSize(new Dimension(width, height));
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }
   public static void main(String[] args) {
      SwingUtilities.invokeLater(()->  new PolygonDemo().start());
   }
   public void start() {

      int r = Math.min(x0, y0) - 2 * gap;

      for (int i = 0; i < value; i++) {
         Double a = i * (Math.toRadians(360 / (double) value));
         xx[i] = (int) (x0 + (r * Math.sin(a)));
         yy[i] = (int) (y0 + (r * Math.cos(a)));
      }

   }

   public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.drawPolygon(xx, yy, value);
      for (int i = 0; i < value; i++) {
         g.drawLine(x0, y0, xx[i], yy[i]);
      }
   }

}

【讨论】:

    【解决方案2】:

    我已经修好了。这是因为类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多