use Derby.frink /** This program draws and tests the roller derby coordinate system defined in Derby.frink. */ black = new color[0,0,0] blue = new color[0,0,1] gray = new color[0,0,0,.5] g = new graphics g.translate[12.5,0] for d = 0 to Derby.d4 step 1 // This gives one entire loop of the track { g.color[black] [x,y] = Derby.WDtoXY[0,d] // Inside of track // println["\$x \$y"] g.fillEllipseCenter[x,y,.5,.5] [x,y] = Derby.WDtoXY[1,d] // Outside of track // println["1 \$d \$x \$y"] g.fillEllipseCenter[x,y,.5,.5] g.color[gray] [x,y] = Derby.WDtoXY[0.5,d] // Middle of track // println["\$x \$y"] g.fillEllipseCenter[x,y,.5,.5] g.color[blue] [x,y] = Derby.WDtoXY[Derby.effectiveW, d] // Effective middle of track. g.fillEllipseCenter[x,y,.5,.5] } /* Draw 10-foot lines all the way around the track. Note that the jammer line is at d=5 so we start there. */ for d=5 to Derby.d4+5 step 10 { [x1,y1] = Derby.WDtoXY[0, d] [x2,y2] = Derby.WDtoXY[1, d] g.line[x1, y1, x2, y2] } // Redraw the jammer line and pivot line in red. g.color[1,0,0,.8] // Jammer line is w=[0,1], d=5. [x1,y1] = Derby.WDtoXY[0,5] [x2,y2] = Derby.WDtoXY[1,5] g.line[x1,y1,x2,y2] // Pivot line is w=[0,1], d=35. [x1,y1] = Derby.WDtoXY[0,35] [x2,y2] = Derby.WDtoXY[1,35] g.line[x1,y1,x2,y2]1 g.write["derby.html", 800, 1000] /** This is just some testing to generate random x/y coordinates and do round-trip conversions between w,d coordinates to make sure that conversions are working in both directions and symmetrical. */ for a=1 to 1000 { // x = randomFloat[-27.5,27.5] x = randomFloat[-40,40] y = randomFloat[-80,80] [w,d] = Derby.XYtoWD[x,y] [x1, y1] = Derby.WDtoXY[w,d] // println["\$x \$y \$x1 \$y1"] dist = sqrt[(x-x1)^2 + (y-y1)^2] if dist > .01 { println["dist is \$dist"] println["\$x \$y \$w \$d"] g.line[x,y,x1,y1] } } g.show[]