Как создать отдельную вкладку класса для круговой диаграммы в процессе обработки?

#processing

#обработка

Вопрос:

Я хочу добавить круговую диаграмму в свой проект, но я хочу иметь возможность иметь вкладку класса только для кодирования круговой диаграммы, а на вкладке setup() draw() просто есть код для вывода круговой диаграммы. Я хочу иметь возможность сделать окно кодирования setup () draw () более чистым, поскольку оно оценивается в моем проекте. Ниже я предоставляю свой исходный код, а затем то, что я пытался сделать, чтобы создать отдельную вкладку класса для кода круговой диаграммы.

Ошибка, которую я получаю, заключается в том, что «Конструктор «PieChart (int, int, int, int[], int[]) » не существует» в строке 8 вкладки setup() draw() и «Тип возвращаемого значения для метода отсутствует» в строке 7 вкладки PieChart.

Исходный код:

 int[] values = {32, 11, 7};
int[] colors = {#E4000F, #655CBE, #107C10};

void setup() {
  size(300, 300);
  pixelDensity(2); 
  smooth();
}

void draw() {
  background(25);
  pieChart(width/2, height/2, 200, values, colors);
}

// pX, pY : position
// pRad : diameter
// pVal: Array of Values
// pCols: Array of colors

void pieChart(float pX, float pY, float pDia, int[] pVal, int[]pCols) {
  stroke(225);
  float total = 0;
  float lastAngle= -PI;
  float mouseAngle = atan2(mouseY-pY, mouseX-pX);

  // get sum of values
  for (int i =0; i<pVal.length; i  ) {
    total  = pVal[i];
  }

  for (int i =0; i<pVal.length; i  ) {
    fill(pCols[i]);
    float angle = map(pVal[i], 0, total, 0, 2*PI);
    arc(pX, pY, pDia, pDia, lastAngle, lastAngle angle, PIE);

    if ( mouseAngle >= lastAngle amp;amp; mouseAngle < lastAngle angle ) {
      text(values[i]   "/50", pX-pDia/2, pY-pDia/2);
    }

    lastAngle  = angle;
  }
}
 

Попытка создания отдельного кода класса (вкладка setup () draw()):

 int[] values = {32, 11, 7};
int[] colors = {#E4000F, #655CBE, #107C10};

PieChart pieChart;

void setup() {
  size(300, 300);
  pieChart = new PieChart(width/2, height/2, 200, values, colors);
}

void draw() {
  background(25);
}
 

Попытка создания отдельного кода класса (вкладка PieChart):

 class PieChart {
  //pX, pY : position
  // pRad : diameter
  // pVal: Array of Values
  // pCols: Array of colors

  pieChart(float pX, float pY, float pDia, int[] pVal, int[]pCols) {
    noStroke();
    float total = 0;
    float lastAngle= -PI;
    float mouseAngle = atan2(mouseY-pY, mouseX-pX);


    // get sum of values
    for (int i =0; i<pVal.length; i  ) {
      total  = pVal[i];
    }

    for (int i =0; i<pVal.length; i  ) {
      fill(pCols[i]);
      float angle = map(pVal[i], 0, total, 0, 2*PI);
      arc(pX, pY, pDia, pDia, lastAngle, lastAngle angle, PIE);

      if ( mouseAngle >= lastAngle amp;amp; mouseAngle < lastAngle angle ) {
        text(values[i]   "/50)", pX-pDia/2, pY-pDia/2);
      }
      lastAngle  = angle;
    }
  }
}
 

Любая помощь приветствуется, большое вам спасибо.

Комментарии:

1. Разве у конструктора не должно быть того же имени и заглавных букв, что и у класса? Я имею в виду: pieChart(float pX, float pY, float pDia, int[] pVal, int[]pCols) {...} не должно быть PieChart(float pX, float pY, float pDia, int[] pVal, int[]pCols) {...} с P на душу населения?

Ответ №1:

В моей системе на Java выполняется следующее:

 int[] values = {32, 11, 7};
int[] colors = {#E4000F, #655CBE, #107C10};

class PieChart {

void pieChart(float pX, float pY, float pDia, int[] pVal, int[]pCols) {
    noStroke();
    float total = 0;
    float lastAngle= -PI;
    float mouseAngle = atan2(mouseY-pY, mouseX-pX);

    // get sum of values
    for (int i =0; i<pVal.length; i  ) {
      total  = pVal[i];
    }

    for (int i =0; i<pVal.length; i  ) {
      fill(pCols[i]);
      float angle = map(pVal[i], 0, total, 0, 2*PI);
      arc(pX, pY, pDia, pDia, lastAngle, lastAngle angle, PIE);

      if ( mouseAngle >= lastAngle amp;amp; mouseAngle < lastAngle angle ) {
        text(values[i]   "/50)", pX-pDia/2, pY-pDia/2);
      }
      lastAngle  = angle;
    }
  }
}

PieChart pieChart;

void setup() {
  size(300, 300);
  pixelDensity(2); 
  smooth();
  pieChart = new PieChart();
}

void draw() {
  background(25);
  pieChart.pieChart(width/2.0, height/2.0, 200.0, values, colors);
}