2016-11-16 5 views
-1

多角形で作成された円を星に変えるために、尖っていない問題があります。基本的には、円の中からポイントを追加して星に変えたいと思っています。それはコースの課題です。私はスパイクのコードを作成する方法を知りません。Java:円で作成された多角形から星を作成

  1. spikinessパラメータは0.0(サッカーボールのような)フック側及び1.0(ウニのような)非常にフック側ではないされた状態で0.0〜1.0の範囲とすることができます。 - (例えば、Iが実現しようとした式が、無成功し)

私は思いinnerRadius =半径×(spikiness 1.0):

  • spikinessパラメータは、式を使用して内側の円の半径を決定します助けをありがとう!

    マイコード:

    import java.awt.*; 
    
    public class StarSampler { 
    
         public static void main(String[] args) 
         { 
          DrawingPanel panel = new DrawingPanel(500, 500); 
          Graphics2D g = panel.getGraphics(); 
          g.setColor(Color.BLUE); 
    
          fillStar(g, 250, 250, 100, 36, 1); // The (1) is for extreme spikeness 
         } 
    
         public static void fillStar(Graphics2D g, int ctrX, int ctrY, int radius, int nPoints, double spikiness) 
         { 
          double xDouble[] = new double[nPoints]; 
          double yDouble[] = new double [nPoints]; 
    
          int xPoint[] = new int[nPoints]; 
          int yPoint[]= new int[nPoints]; 
    
          int angle = 0; 
    
          for (int i = 0; i < nPoints; i++) // Continue through use of Prog6 formula 
          { 
           xDouble[i] = ctrX + radius * Math.cos(Math.toRadians(angle)); 
           yDouble[i] = ctrY + radius * Math.sin(Math.toRadians(angle)); 
           angle += 10; 
          } 
          for (int j = 0; j < nPoints; j++) // Casts for ints and doubles 
          { 
           xPoint[j] = (int) xDouble[j]; 
           yPoint[j] = (int) yDouble[j]; 
          } 
          g.fillPolygon(xPoint, yPoint, nPoints); // Creates polygon 
         } 
    } 
    
  • +0

    N「点」の星は、2Nポイント0、2、4 ... 'R'半径である点と、点1とちょうど円であります、3、4 ...は半径「スパイクネス* R」にある。あなたは 'N '点(2Nではなく)を作成しているだけで、あなたは' spikiness'を使用していません。 –

    +0

    私は2Nを作成していないことを知っています、そして、スパイクを使用していません。私は基本的には、全体のメソッドをコピーし、スパイクを行うだろうか? – Aramza

    答えて

    0

    N "点" のスターは、2Nポイント0、2、4 ...半径Rである点、および点1,3とちょうど円であります5 ...半径はspikiness * Rです。

    Nポイント(2Nではなく)を作成していて、spikinessは使用していません。このようなものは、(未テスト)動作する可能性があります:

    double xDouble[] = new double[2*nPoints]; 
    double yDouble[] = new double[2*nPoints]; 
    
    for (int i = 0; i < 2*nPoints; i++) 
    { 
        double iRadius = (i % 2 == 0) ? radius : (radius * spikiness); 
        double angle = i * 360.0/(2*nPoints); 
    
        xDouble[i] = ctrX + iRadius * Math.cos(Math.toRadians(angle)); 
        yDouble[i] = ctrY + iRadius * Math.sin(Math.toRadians(angle)); 
    } 
    
    +0

    ポリゴンdrawPolygon(int、int、int)を描画するプログラムを得るのが面倒です。私もキャストしようとしました。 – Aramza

    関連する問題