#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);
}