在Java绘图中比例化圆圈

时间:2017-10-31 06:06:07

标签: java geometry

我需要帮助来修改代码,以便它代表下面的引用位。我画了一个靶心,但它的尺寸不一样。如何使尺寸匹配?我的代码对错误的大小提出了看法。我的代码只是画了一个靶心。图片:enter image description here

所以我的目标是使这些同心圆遵循一些比例规范。问题是,我不知道如何在Java中这样做。 具体来说:

  

...圆的半径与最短的窗口尺寸成比例,即目标公司标识的靶心部分,因此从最近点到最短边缘的距离始终是内部的半径圈。

供参考,这是Target徽标:

enter image description here

这是我已经拥有的;我只需要使它成比例。

import java.awt.Graphics;
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class RedTarget extends JPanel
{

  public void paintComponent(Graphics g)
  {
    super.paintComponent(g);

    int newWidth = (getWidth() / 8);
    int newH = (getHeight() / 8);
    int widthcorner = (getWidth() / 2) - (newH * 3);
    int ywidthcorner = (getHeight() / 2) - (newWidth * 3);
    if (getHeight() < getWidth()) 
    {
      g.setColor(Color.RED);
      g.fillOval(widthcorner, newH, newH * 6, newH * 6);
      g.setColor(Color.WHITE); 
      g.fillOval(widthcorner + newH, newH * 2, newH * 4, newH * 4); 
      g.setColor(Color.RED);
      g.fillOval(widthcorner + newH * 2, newH * 3, newH * 2, newH * 2);
    }

    else
    {
      g.setColor(Color.RED);
      g.fillOval(newWidth, ywidthcorner, + newWidth * 6, newWidth * 6);
      g.setColor(Color.WHITE); 
      g.fillOval(newWidth * 2, ywidthcorner + newWidth, newWidth * 4, newWidth * 4);
      g.setColor(Color.RED);
      g.fillOval(newWidth * 3, ywidthcorner + newWidth * 2, newWidth * 2, newWidth * 2);
    }



  }



  public static void main(String[] args)
  {
    JFrame window = new JFrame("Red Target");
    window.setBounds(300, 300, 200, 200);
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    RedTarget panel = new RedTarget();
    panel.setBackground(Color.WHITE);
    Container c = window.getContentPane();
    c.add(panel);
    window.setVisible(true);
  }
}

任何帮助表示赞赏! :)

1 个答案:

答案 0 :(得分:1)

设内半径为R,中半径和大半径为2R和3R 我没有看到关于边距的任何线索,所以让我们分配最窄的边距= R / 4

 S = Min(Width, Height)
 L = Max(Width, Height)
   for smaller dimension
 3 * R + 2 * 1/4 * R <= S
   for larger direction
 3 * R + R + 1/4 R <= L

因此我们可以选择尽可能大的内半径:

 R = Min(2/7 * S, 4/17 * L)