Next: 3 スレッドの中断と再開
Up: 2 絵の表示
Previous: 2.3 Appletの例 CurveTest.html
// CCurveTest.java
import java.awt.*;
import java.awt.geom.*;
import java.applet.*;
public class CurveTest extends Applet
{
double dist(double x0, double y0,
double x1, double y1) {
return(
Math.sqrt((double)
((x1-x0)*(x1-x0) +
(y1-y0)*(y1-y0))));
}
void line (Graphics g,
int x0, int y0,
int x1, int y1) {
g.drawLine(x0,y0,x1,y1);
}
void CCurve (Graphics g,
double x0, double y0,
double x1, double y1,
double minlen) {
if (dist(x0,y0,x1,y1) < minlen)
line(g, (int)x0,(int)y0,
(int)x1,(int)y1);
else {
double x2= (x0 + y0 + x1 - y1) / 2.0;
double y2= (-x0 + y0 + x1 + y1) / 2.0;
CCurve(g, x0,y0, x2, y2, minlen);
CCurve(g, x2,y2, x1, y1, minlen);
}
}
void CCurve (Graphics g,
Point2D p0,
Point2D p1, int minlen) {
CCurve(g, p0.getX(),p0.getY(),
p1.getX(),p1.getY(),minlen);
}
void DragonCurve (Graphics g,
double x0, double y0,
double x1, double y1,
double minlen) {
if (dist(x0,y0,x1,y1) < minlen)
line(g, (int)x0,(int)y0,
(int)x1,(int)y1);
else {
double x2= (x0 + y0 + x1 - y1) / 2.0;
double y2= (-x0 + y0 + x1 + y1) / 2.0;
DragonCurve(g, x0,y0, x2, y2, minlen);
DragonCurve(g, x1,y1, x2, y2, minlen);
}
}
public void init() {
setSize(600,850);
}
public void paint(Graphics g) {
CCurve(g, 200, 100, 400, 100, 10);
DragonCurve(g, 200, 400, 400, 400, 5);
CCurve(g,
new Point2D.Double(200.0,600.0),
new Point2D.Double(400.0,600.0),5);
}
}
generated through LaTeX2HTML. M.Inaba 平成18年5月7日