📄 kochpanel.java
字号:
//********************************************************************
// KochPanel.java Author: Lewis/Loftus
//
// Represents a drawing surface on which to paint a Koch Snowflake.
//********************************************************************
import java.awt.*;
import javax.swing.JPanel;
public class KochPanel extends JPanel
{
private final int PANEL_WIDTH = 400;
private final int PANEL_HEIGHT = 400;
private final double SQ = Math.sqrt(3.0) / 6;
private final int TOPX = 200, TOPY = 20;
private final int LEFTX = 60, LEFTY = 300;
private final int RIGHTX = 340, RIGHTY = 300;
private int current; // current order
//-----------------------------------------------------------------
// Sets the initial fractal order to the value specified.
//-----------------------------------------------------------------
public KochPanel (int currentOrder)
{
current = currentOrder;
setBackground (Color.black);
setPreferredSize (new Dimension(PANEL_WIDTH, PANEL_HEIGHT));
}
//-----------------------------------------------------------------
// Draws the fractal recursively. The base case is order 1 for
// which a simple straight line is drawn. Otherwise three
// intermediate points are computed, and each line segment is
// drawn as a fractal.
//-----------------------------------------------------------------
public void drawFractal (int order, int x1, int y1, int x5, int y5,
Graphics page)
{
int deltaX, deltaY, x2, y2, x3, y3, x4, y4;
if (order == 1)
page.drawLine (x1, y1, x5, y5);
else
{
deltaX = x5 - x1; // distance between end points
deltaY = y5 - y1;
x2 = x1 + deltaX / 3; // one third
y2 = y1 + deltaY / 3;
x3 = (int) ((x1+x5)/2 + SQ * (y1-y5)); // tip of projection
y3 = (int) ((y1+y5)/2 + SQ * (x5-x1));
x4 = x1 + deltaX * 2/3; // two thirds
y4 = y1 + deltaY * 2/3;
drawFractal (order-1, x1, y1, x2, y2, page);
drawFractal (order-1, x2, y2, x3, y3, page);
drawFractal (order-1, x3, y3, x4, y4, page);
drawFractal (order-1, x4, y4, x5, y5, page);
}
}
//-----------------------------------------------------------------
// Performs the initial calls to the drawFractal method.
//-----------------------------------------------------------------
public void paintComponent (Graphics page)
{
super.paintComponent (page);
page.setColor (Color.green);
drawFractal (current, TOPX, TOPY, LEFTX, LEFTY, page);
drawFractal (current, LEFTX, LEFTY, RIGHTX, RIGHTY, page);
drawFractal (current, RIGHTX, RIGHTY, TOPX, TOPY, page);
}
//-----------------------------------------------------------------
// Sets the fractal order to the value specified.
//-----------------------------------------------------------------
public void setOrder (int order)
{
current = order;
}
//-----------------------------------------------------------------
// Returns the current order.
//-----------------------------------------------------------------
public int getOrder ()
{
return current;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -