【问题标题】:My fractal isn't printing properly, when I use the right values, it doesn't print at all我的分形没有正确打印,当我使用正确的值时,它根本不会打印
【发布时间】:2021-11-06 19:38:12
【问题描述】:

分形称为 Vicsek 分形。当我将中点的 x 和 y 值设置为 = firstDot 的 x 和 y 值 / 3 时,我得到了分形,但我的分形非常小,而且偏向一边。但是,当我将它设置为等于 firstDot 的值 * 3/2 时,假设是,只有正方形打印,而不是分形。

package fractals;

import java.awt.Color;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
/**
*
* @author Joshua
*/
public class SquarePanel extends JPanel {

static final int[] xPoints = new int[]{270, 270, 810, 810};//Square x coordiantes
static final int[] yPoints = new int[]{92, 632, 632, 92};//Square y coordinates
int firstDotx = 270 + (int) (Math.random() * ((810 - 270) + 1)); 
int firstDoty = 92 + (int) (Math.random() * ((632 - 92) + 1));

public final static int iterations = 100000;

@Override
protected void paintComponent(Graphics g) {
    super.paintComponent(g);

    Graphics2D g2 = (Graphics2D) g;
    g2.setColor(Color.black);
    g2.drawPolygon(xPoints, yPoints, 4);
    g2.drawRect(firstDotx, firstDoty, 0, 0);
    for (int i = 0; i <= iterations; i++) {
        int midpointX;
        int midpointY;
        int Vertex = (int) (Math.random() * 5 + 1);
        switch (Vertex) { 
            case 1: //top left corner
                g2.setColor(Color.blue);
                midpointX = (firstDotx + 270) / 3;
                midpointY = (firstDoty + 92) / 3;
                g2.drawRect(midpointX, midpointY, 0, 0);
                firstDotx = midpointX;
                firstDoty = midpointY;
                break;
            case 2://bottom left
                g2.setColor(Color.blue);
                midpointX = (firstDotx + 270) / 3;
                midpointY = (firstDoty + 632) / 3;
                g2.drawRect(midpointX, midpointY, 0, 0);
                firstDotx = midpointX;
                firstDoty = midpointY;
                break;
            case 3://bottom right
                g2.setColor(Color.blue);
                midpointX = (firstDotx + 810) / 3;
                midpointY = (firstDoty + 632) / 3;
                g2.drawRect(midpointX, midpointY, 0, 0);
                firstDotx = midpointX;
                firstDoty = midpointY;
                break;
            case 4://bottom left
            g2.setColor(Color.blue);
                midpointX = (firstDotx + 810) / 3;
                midpointY = (firstDoty + 92) / 3;
                g2.drawRect(midpointX, midpointY, 0, 0);
                firstDotx = midpointX;
                firstDoty = midpointY;
                break;
                case 5:
                g2.setColor(Color.red);
                midpointX = (firstDotx + 540) / 3;
                midpointY = (firstDoty + 384) / 3;
                g2.drawRect(midpointX, midpointY, 0, 0);
                firstDotx = midpointX;
                firstDoty = midpointY;
                break;
            default:
                break;
            
        }
    }
}
}

这是 Frame 的类文件,我打算添加一个带有按钮的 GUI,但我还没有到那里。

package fractals;

import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import static javax.swing.JFrame.EXIT_ON_CLOSE;

/**
*
* @author Joshua
*/
public class SqaureFrame {
 public static void main(String[] args) {
    JFrame Sframe = new JFrame("Vicsek Fractal");
    Sframe.setSize(1080, 768);
    Sframe.setLocation(300, 200);
    Sframe.setDefaultCloseOperation(EXIT_ON_CLOSE);
    SquarePanel Vicsek = new SquarePanel();
    JButton Square = new JButton("Click for the Vicsek Fractal");
    Sframe.add(Vicsek);
    Sframe.setVisible(true);
}
}

【问题讨论】:

标签: java swing fractals


【解决方案1】:

感谢所有看过它的人,但我设法解决了它。我注意到我的分形的大小与正方形的四分之一大小相同,所以我取了正方形中每个顶点的坐标(例如“+270”)并将它们加倍。我的分形现在可以正确打印了。

例如:

midpointY = (firstDoty + 92*2) / 3

【讨论】:

    猜你喜欢
    • 2019-11-29
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 2018-06-25
    • 2022-08-03
    • 2022-01-26
    相关资源
    最近更新 更多