La espiral de Fermat es una curva logarítmica que se describe mediante una ecuación polar. Esta espiral se caracteriza por tener radios que se expanden logarítmicamente con respecto al ángulo polar. La ecuación de la espiral de Fermat es:
r = a * t^(1/n)
r: Distancia del origen a un punto en la espiral.
a: Constante positiva. Controla la tasa de expansión de los radios en la espiral.
t: Ángulo polar.
n: Exponente de la constante. Determina el grado de curvatura de la espiral y cómo se relaciona con el ángulo polar.
Código Java (FermatSpiral.java):
package fermatspiral;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class FermatSpiral extends JPanel {
private static final long serialVersionUID = 1L;
private static final int MAX_ITER = 512;
private static final double SCALE = 80;
private static final double A = 1;
private static final int N = 3;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.translate(getWidth() / 2, getHeight() / 2);
float lineWidth = 0.1f;
double theta = 0;
double r;
g2d.setColor(Color.BLUE);
double x1 = 0, y1 = 0, x2, y2;
for (int i = 0; i < MAX_ITER; i++) {
r = A * Math.pow(theta, 1.0 / N);
x2 = SCALE * r * Math.cos(theta);
y2 = SCALE * r * Math.sin(theta);
g2d.setStroke(new BasicStroke(lineWidth));
g2d.draw(new Line2D.Double(x1, y1, x2, y2));
theta += 0.1;
lineWidth += 0.01;
x1 = x2;
y1 = y2;
}
}
public static void main(String[] args) {
JFrame frame = new JFrame("Spiral Fermat");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new FermatSpiral());
frame.setSize(new Dimension(800, 800));
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Resultado: