如何为正在比较的矩形着色?
How to color the rectangles that are being compared?
我是处理环境的新手,正在尝试构建用于冒泡排序的可视化工具。我对此有一些疑问 -
- 矩形的可视化和绘制是否正确?
- 如何为当前比较的不同矩形着色?
- 这是否可以在 java 中使用 Swing 或任何本机库(即无需处理)完成?如果是,请提供一些资源。
int totalNum = 10;
int[] values = new int[totalNum];
int i = 1;
int noOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int i = 0; i< totalNum; i++) {
//text(values[i], rectPos , values[i]);
stroke(220);
fill(50);
rect(rectPos, height - values[i], width / totalNum, values[i]);
rectPos += width / totalNum;
}
textSize(20);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
bubbleSort();
}
void bubbleSort() {
if (i < totalNum) {
if (values[i] < values[i-1] && noOfComp++ > 0) {
fill(255,5,5);
swap(i, i-1);
delay(100);
}
i++;
} else {
i = 1;
}
}
void swap(int a, int b) {
int temp = values[a];
values[a] = values[b];
values[b] = temp;
}
void setup() {
size(700, 700);
for (int i = 0; i< totalNum; i++) {
values[i] = round(random(0, height));
}
}
Is the visualization and drawing of the rectangles correct?
这是基于意见的。但它有效,所以是的。代码结构良好并遵循基本准则。
How do I color the rectangles different that are being compared currently?
在绘制矩形之前,您可以通过 fill()
设置单独的颜色。一种颜色由红色、绿色和蓝色通道组成。通道混合成最终颜色。如果所有 3 个通道都具有相同的比例,则颜色为灰度颜色。 (0, 0, 0) 是黑色,(255, 255, 255) 是白色。
例如将比较的矩形着色为红色,将所有其他矩形着色为灰色。比较的矩形具有索引 i
和 i-1
.
由于for
循环的控制变量也被命名为i
,因此必须更改(例如j
):
for (int j = 0; j < totalNum; j++) {
// [...]
}
比较索引 i
和控制变量 j
。如果 j==i-1
或 j==i
则设置红色填充颜色 (fill(255, 0, 0)
) 否则设置灰色 (fill(127)
):
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (j==i-1 || j==i) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
如果您只想为 "swapped" 矩形着色,则必须确定 noOfComp
何时更改。在调用 bubbleSort
之前,在变量 prevNoOfComp
中声明先前的交换计数。如果交换计数发生变化,只需使用不同的颜色 (if (noOfComp != prevNoOfComp && (j==i-1 || j==i))
):
int noOfComp = 0;
int prevNoOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (noOfComp != prevNoOfComp && (j==i-1 || j==i)) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
textSize(12);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
prevNoOfComp = noOfComp;
bubbleSort();
}
[...] can be done in java using Swing or any native libraries
要求我们推荐或查找书籍、工具、软件库、教程或其他站外资源的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引自以为是的人答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。
我是处理环境的新手,正在尝试构建用于冒泡排序的可视化工具。我对此有一些疑问 -
- 矩形的可视化和绘制是否正确?
- 如何为当前比较的不同矩形着色?
- 这是否可以在 java 中使用 Swing 或任何本机库(即无需处理)完成?如果是,请提供一些资源。
int totalNum = 10;
int[] values = new int[totalNum];
int i = 1;
int noOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int i = 0; i< totalNum; i++) {
//text(values[i], rectPos , values[i]);
stroke(220);
fill(50);
rect(rectPos, height - values[i], width / totalNum, values[i]);
rectPos += width / totalNum;
}
textSize(20);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
bubbleSort();
}
void bubbleSort() {
if (i < totalNum) {
if (values[i] < values[i-1] && noOfComp++ > 0) {
fill(255,5,5);
swap(i, i-1);
delay(100);
}
i++;
} else {
i = 1;
}
}
void swap(int a, int b) {
int temp = values[a];
values[a] = values[b];
values[b] = temp;
}
void setup() {
size(700, 700);
for (int i = 0; i< totalNum; i++) {
values[i] = round(random(0, height));
}
}
Is the visualization and drawing of the rectangles correct?
这是基于意见的。但它有效,所以是的。代码结构良好并遵循基本准则。
How do I color the rectangles different that are being compared currently?
在绘制矩形之前,您可以通过 fill()
设置单独的颜色。一种颜色由红色、绿色和蓝色通道组成。通道混合成最终颜色。如果所有 3 个通道都具有相同的比例,则颜色为灰度颜色。 (0, 0, 0) 是黑色,(255, 255, 255) 是白色。
例如将比较的矩形着色为红色,将所有其他矩形着色为灰色。比较的矩形具有索引 i
和 i-1
.
由于for
循环的控制变量也被命名为i
,因此必须更改(例如j
):
for (int j = 0; j < totalNum; j++) {
// [...]
}
比较索引 i
和控制变量 j
。如果 j==i-1
或 j==i
则设置红色填充颜色 (fill(255, 0, 0)
) 否则设置灰色 (fill(127)
):
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (j==i-1 || j==i) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
如果您只想为 "swapped" 矩形着色,则必须确定 noOfComp
何时更改。在调用 bubbleSort
之前,在变量 prevNoOfComp
中声明先前的交换计数。如果交换计数发生变化,只需使用不同的颜色 (if (noOfComp != prevNoOfComp && (j==i-1 || j==i))
):
int noOfComp = 0;
int prevNoOfComp = 0;
void draw() {
float rectPos = 0;
frameRate(10);
background(255);
for (int j = 0; j < totalNum; j++) {
stroke(220);
if (noOfComp != prevNoOfComp && (j==i-1 || j==i)) {
fill(255, 0, 0);
} else {
fill(127);
}
rect(rectPos, height - values[j], width / totalNum, values[j]);
rectPos += width / totalNum;
}
textSize(12);
text("No. Of Comparisons: ", 15, 40);
text(noOfComp, 80, 60);
prevNoOfComp = noOfComp;
bubbleSort();
}
[...] can be done in java using Swing or any native libraries
要求我们推荐或查找书籍、工具、软件库、教程或其他站外资源的问题对于 Stack Overflow 来说是偏离主题的,因为它们往往会吸引自以为是的人答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。