2016-11-16 2 views
-1

У меня возникли проблемы с созданием остроты (чтобы превратить круг, созданный с помощью полигона в звезду). В основном я хочу добавить точки из круга, чтобы превратить его в звезду. Это задание для курса. Я не знаю, как создать код для остроты.Java: Создание звезды из круга Созданный многоугольник

Примечания:

  1. Параметр spikiness может находиться в диапазоне от 0,0 до 1,0 с 0,0 составляет не Spikey (как футбольный мяч) и 1,0 будучи чрезвычайно Spikey (как морского ежа).

  2. Параметр spikiness определяет радиус внутренней окружности, используя формулу: innerRadius = радиус * (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 ... находятся по радиусу 'spikiness * 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

Смежные вопросы