home *** CD-ROM | disk | FTP | other *** search
- /* test */
- /*TRACE I*/
-
- address MetaView.0
-
- K=1.732050807568877293 /* sqrt(3) */
- LIMIT=100*100 /* Don't split lines shorter than 2 pixels */
-
- newpic 100 100 0 "KochKurve"
-
- call Koch(5000, 20000, 30000, 20000)
- redrawpic
- return 0
-
- Koch: PROCEDURE
- ARG x0,y0,x1,y1
-
- K=0.5 /*1.732050807568877293 sqrt(3) */
- LIMIT=200*200 /* Don't split lines shorter than 2 pixels */
-
- dx = x1 - x0
- dy = y1 - y0
- l = dx*dx + dy*dy;
- if l<limit then
- do
- /* segment too small... just draw it */
- /* say "Line" x0 y0 x1 y1 */
- AMF_DRAWLINE trunc(x0) trunc(y0) trunc(x1) trunc(y1)
- end
- else
- do
- /* Segment big enough... go subdividing */
- xa = x0 + dx/3
- ya = y0 + dy/3
- xb = x1 - dx/3
- yb = y1 - dy/3
- xc = (x0 + x1 + dy*K)/2
- yc = (y0 + y1 - dx*K)/2
-
- call Koch(x0, y0, xa, ya)
- call Koch(xa, ya, xc, yc)
- call Koch(xc, yc, xb, yb)
- call Koch(xb, yb, x1, y1)
- /*
- AMF_DRAWLINE trunc(x0) trunc(y0) trunc(xa) trunc(ya)
- AMF_DRAWLINE trunc(xa) trunc(ya) trunc(xc) trunc(yc)
- AMF_DRAWLINE trunc(xc) trunc(yc) trunc(xb) trunc(yb)
- AMF_DRAWLINE trunc(xb) trunc(yb) trunc(x1) trunc(y1)
- */
- end
- return 0
-