Сделайте, чтобы мой вывод (Canvas) показывал ТОЛЬКО значения между [0,1] (Java) - PullRequest
0 голосов
/ 15 марта 2020

Наличие следующего интерфейса GridBagLayout с типом Canvas внутри него для представления случайных генерируемых чисел, нормализованных между [0,1] интервалами:

Interface with canvas

Я обнаружил следующую проблему: мой холст показывает значения выше 1, поэтому это означает, что я не вижу свои нормализованные точки (x, y); потому что они слишком малы с фактическими настройками холста. Вот что я хотел бы:

Desired result

Как вы видите, точки получены с использованием Структура решетки . Как я могу это сделать?

РЕДАКТИРОВАТЬ: Включить код:

/**
 * Clase auxiliar empleada en interfazSimulacion.java para la representación de
 * nuestras simulaciones gráficas en el output. Hereda de la clase Canvas y
 * sobreescribe el método paint de dicha clase.
 * @author Fco Javier Perez Sanchez
 * @version 1.1
 * @since February 25, 2020
 */

import java.awt.*;
import java.awt.geom.*;
import java.math.BigDecimal;

public class Grafico extends Canvas{

public static int cantidadPuntos;
public static BigDecimal[] coordenadasX;
public static BigDecimal[] coordenadasY;

/**
 * Constructor principal del programa
 */

public Grafico(){
    setPreferredSize(new Dimension(600,600));
    setBackground(Color.decode("#202421"));
}

/**
 * Método que establece la cantidad de puntos y las coordenadas de los puntos en X e Y.
 * @param cantidad  cantidad de puntos a generar.
 * @param X coordenadas en X.
 * @param Y coordenadas en Y.
 */

public static void getPuntos(int cantidad, BigDecimal[] X, BigDecimal[] Y){

    cantidadPuntos = cantidad;

    coordenadasX = new BigDecimal[cantidadPuntos];
    coordenadasY = new BigDecimal[cantidadPuntos];
    coordenadasX = X;
    coordenadasY = Y;
}

/**
 * Método que sirve para dibujar las simulaciones deseadas.
 * @param graphic objeto de tipo graphics usado para dichas simulaciones.
 */

@Override

public void paint(Graphics graphic){
    graphic.setColor(Color.GREEN);

    //graphic.fillRect(10,10,10,10);
    Graphics2D nuevoOutput = (Graphics2D) graphic;


    for(int i = 0; i < cantidadPuntos-1; i = i+2){

        Rectangle2D rect;
        rect = (new Rectangle.Double(coordenadasX[i].doubleValue()%this.getWidth(), coordenadasY[i+1].doubleValue()%this.getHeight(), 3,3));

        nuevoOutput.fill(rect);
    }
}

1 Ответ

1 голос
/ 15 марта 2020

Не поможет с вашей проблемой, но приложения Swing должны расширять JPanel, а не Canvas и выполнять пользовательскую рисование путем переопределения paintComponent(…), а не paint ().

Я не могу увидеть мои нормализованные точки (х, у); потому что они слишком малы с фактическими настройками холста.

Если у вас есть числа между [0, 1], вам не нужно умножать (вместо использования по модулю) эти числа на ширину / высоту панели, чтобы получить целую точку х / у сделать картину?

Это сбой только для максимального значения (1,1)

Хорошо, если точка начинается у границ панели и продолжается на 3 пикселя, то точка нарисован за пределами панели, и вы не сможете его увидеть.

Может быть, вам нужно умножить нормализованное значение на (размер панели - 3)?

...