Este programa crea una ventana que muestra un mapa de calor basado en los valores de la matriz proporcionada. Los valores más bajos se representan en negro y los valores más altos en blanco, con una escala de grises entre ellos.
Matriz de distancias:
0 185 905 911 236 173 549 85 506 972 911 681
185 0 421 824 270 350 79 275 666 831 259 251
905 421 0 286 136 338 764 249 881 508 902 798
911 824 286 0 924 282 815 40 242 571 448 886
236 270 136 924 0 88 521 140 345 799 544 295
173 350 338 282 88 0 584 254 61 76 931 870
549 79 764 815 521 584 0 353 795 547 213 198
85 275 249 40 140 254 353 0 181 682 427 539
506 666 881 242 345 61 795 181 0 618 775 521
972 831 508 571 799 76 547 682 618 0 734 462
911 259 902 448 544 931 213 427 775 734 0 162
681 251 798 886 295 870 198 539 521 462 162 0
Código Java (HeatMap.java):
import javax.swing.*;
import java.awt.*;
public class HeatMap extends JPanel {
private final int[][] data;
private final int maxValue;
private final int minValue;
public HeatMap(int[][] data) {
this.data = data;
this.maxValue = findMaxValue(data);
this.minValue = findMinValue(data);
}
private int findMaxValue(int[][] data) {
int max = Integer.MIN_VALUE;
for (int[] row : data) {
for (int value : row) {
if (value > max) {
max = value;
}
}
}
return max;
}
private int findMinValue(int[][] data) {
int min = Integer.MAX_VALUE;
for (int[] row : data) {
for (int value : row) {
if (value < min) {
min = value;
}
}
}
return min;
}
private Color getColor(int value) {
float normalizedValue = (float)(value - minValue) / (maxValue - minValue);
int gray = (int)(normalizedValue * 255);
return new Color(gray, gray, gray);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int cellWidth = getWidth() / data[0].length;
int cellHeight = getHeight() / data.length;
for (int row = 0; row < data.length; row++) {
for (int col = 0; col < data[row].length; col++) {
g.setColor(getColor(data[row][col]));
g.fillRect(col * cellWidth, row * cellHeight, cellWidth, cellHeight);
}
}
}
@Override
public Dimension getPreferredSize() {
return new Dimension(600, 600);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Heat Map");
int[][] data = {
{0, 185, 905, 911, 236, 173, 549, 85, 506, 972, 911, 681},
{185, 0, 421, 824, 270, 350, 79, 275, 666, 831, 259, 251},
{905, 421, 0, 286, 136, 338, 764, 249, 881, 508, 902, 798},
{911, 824, 286, 0, 924, 282, 815, 40, 242, 571, 448, 886},
{236, 270, 136, 924, 0, 88, 521, 140, 345, 799, 544, 295},
{173, 350, 338, 282, 88, 0, 584, 254, 61, 76, 931, 870},
{549, 79, 764, 815, 521, 584, 0, 353, 795, 547, 213, 198},
{85, 275, 249, 40, 140, 254, 353, 0, 181, 682, 427, 539},
{506, 666, 881, 242, 345, 61, 795, 181, 0, 618, 775, 521},
{972, 831, 508, 571, 799, 76, 547, 682, 618, 0, 734, 462},
{911, 259, 902, 448, 544, 931, 213, 427, 775, 734, 0, 162},
{681, 251, 798, 886, 295, 870, 198, 539, 521, 462, 162, 0}
};
HeatMap heatMap = new HeatMap(data);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(heatMap);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Resultado: