REVO2700GTurtle GraphicsX$9global x0,y0,angl,penDown,x,y local penDown1,xsave,ysave,asave,penDownSave,labelcount global radPerDeg,degPerRad,noDraw,waittime local x1,y1,A1 --You may be puzzle by "drag from 0,0 to 0,0" in the handlers below, and "set the Lockscreen to true" --Don't ask. on ShowTurtle put false into noDraw show graphic "turtleGraphic" end ShowTurtle on hideTurtle put true into noDraw hide graphic "turtleGraphic" end hideTurtle on startTurtle clean put true into penDown put (the width of this card)/2 into x0 put (the height of this card)/2 into y0 put 0 into x put 0 into y put 0 into angl if there is no graphic "turtleGraphic" then set the style of the templateGraphic to "line" if there is no graphic "turtleGraphic" then create graphic "turtleGraphic" set the endArrow of graphic "turtleGraphic" to true set the arrowsize of graphic "turtleGraphic" to 5 end if choose pencil tool end startTurtle on st startTurtle end st on setDragTo temp if temp >20 then put 20 into waitTime exit setDragTo end if if temp < 0 then put 0 into waitTime exit setDragTo end if put temp into waitTime end setDragTo on clearScreen clean end clearScreen on cs clean end cs on clearText ct end clearText on ct put empty into field "data" end ct on clean ct lock screen repeat while the number of images > 0 delete image 1 end repeat put 1 into i repeat while i <= the number of fields if "fieldLabel" is in word 2 of the name of field i then delete field i else add 1 to i end repeat put 1 into labelCount unlock screen end clean on home setxy 0,0 put 0 into angl drawTurtle end home on setHome xx,yy put (the width of this stack)/2 + xx into x0 put (the height of this stack)/2 - yy into y0 drawturtle end setHome on moveHome dx,dy add dx to x0 add -dy to y0 drawturtle end moveHome on incXY dx,dy --set the lockscreen to true if penDown then drag from (x0 + x),(y0 - y) to (x0 +x +dx) ,(y0 -y - dy) --else drag from 0,0 to 0,0 add dx to x add dy to y drawTurtle --set the lockscreen to false end incXY on setxy xnew,ynew get the paramCount if it = 1 then put item 2 of xnew into ynew put item 1 of xnew into xnew end if --set the lockscreen to true if penDown then drag from (x0 + x),(y0 - y) to (x0 +xnew),(y0 - ynew) --else drag from 0,0 to 0,0 put xnew into x put ynew into y drawTurtle --set the lockscreen to false end setxy on setRA tRadius, tAngle put tRadius*cosine(tAngle) into tx put tRadius*sine(tAngle) into ty setXY tX,tY end setRA on setHeading temp seth temp end setHeading on seth anglnew put anglnew into angl drawTurtle end seth on left dangl lt dangl end left on right dangl rt dangl end right on rt dangl subtract dangl from angl drawTurtle end rt on lt dangl add dangl to angl drawTurtle end lt on forward distance fd distance end forward on myWait temp if temp = 0 then exit myWait wait temp end myWait on drawTurtle myWait waitTime if noDraw then exit drawturtle put 5 into distance put round(x0 +x)&comma& round(-y+y0) & return into gPoints put distance * cos(radPerDeg * angl) into dx put distance * sin(radPerDeg * angl) into dy put round(x+x0+dx)&comma&round(-y+y0-dy) after gPoints set points of graphic "turtleGraphic" to gPoints end drawTurtle on fd distance put distance * cos(radPerDeg * angl) into dx put distance * sin(radPerDeg * angl) into dy --set the lockscreen to true if penDown then drag from (x0 + x),(y0 - y) to (x0 + x + dx), (y0 - y - dy) --else drag from 0,0 to 0,0 add dx to x add dy to y drawturtle --set the lockscreen to false end fd on back distance forward -distance end back on bk distance back distance end bk on pu put false into penDown end pu on penUp pu end penUp on penDown pd end penDown on pd put true into penDown end pd function toward xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx if dx = 0 then if dy > 0 then return 90 else return 90 + 180 end if if dy = 0 then if dx > 0 then return 0 else return 180 end if put degPerRad * atan(abs(dy) / abs(dx)) into angl if dy > 0 then if dx > 0 then return angl else return 180 - angl end if if dx > 0 then return 360 - angl else return 180 + angl end if end toward function direction xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx if dx = 0 then if dy > 0 then return 90 else return 90 + 180 end if if dy = 0 then if dx > 0 then return 0 else return 180 end if put degPerRad * atan(abs(dy) / abs(dx)) into angl if dy > 0 then if dx > 0 then return angl else return 180 - angl end if if dx > 0 then return 360 - angl else return 180 + angl end if end direction function direction2 xtemp,ytemp get the paramCount if it is 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if put ytemp - y into dy put xtemp - x into dx put arctangent2(dy,dx) into tAngle if tAngle < 0 then return 360 + tAngle else return tAngle end direction2 function arctangent2 ty,tx return degPerRad * atan2(ty,tx) end arctangent2 function randomInRange b,t return random(t-b+1) + b-1 end randomInRange function xycor return x & comma & y end xycor function pos return x & comma & y end pos function xcor return x end xcor function ycor return y end ycor on setx xnew --set the lockscreen to true if penDown then drag from (x0 + x),(y0 - y) to (x0 +xnew),(y0 - y) --else drag from 0,0 to 0,0 put xnew into x drawTurtle --set the lockscreen to false end setx on sety ynew --set the lockscreen to true if penDown then drag from (x0 + x),(y0 - y) to (x0 +x),(y0 - ynew) --else drag from 0,0 to 0,0 put ynew into y drawTurtle --set the lockscreen to false end sety function distance xtemp,ytemp get the paramCount if it = 1 then put item 2 of xtemp into ytemp put item 1 of xtemp into xtemp end if return sqrt ((x-xtemp)^2 + (y-ytemp)^2) end distance function heading repeat while angl >360 subtract 360 from angl end repeat repeat while angl < 0 add 360 to angl end repeat return angl end heading on centeredCircle r put the tool into savedTool set the filled to false set the centered to true choose the oval tool drag from (x0+x),(y0-y) to (x0+x+r),(y0-y-r) set the centered to false choose the savedTool end centeredCircle on startMonkey put 0 into x1 put 0 into y1 put 0 into A1 put true into penDown1 end startMonkey on sm startMonkey end sm on tellMonkey put x into xsave put y into ysave put angl into asave put penDown into penDownSave put x1 into x put y1 into y put a1 into angl put penDown1 into penDown end tellMonkey on endMonkey put x into x1 put y into y1 put angl into a1 put penDown into penDown1 put xsave into x put ysave into y put asave into angl put penDownSave into penDown end endMonkey on sm put 0 into x1 put 0 into y1 put 0 into a1 put true into penDown1 end sm on startMonkey sm end startMonkey function sci tNum,sigFigures if tNum < 0 then put "-" into sign else put empty into sign put abs(tNum) into tNum if sigFigures is empty then put 3 into sigFigures --Default significant figures. put 0 into count if tNum >= 1 then repeat until tNum < 10 divide tNum by 10 add 1 to count end repeat put round((10^(sigFigures-1))*tNum)/10^(sigFigures-1) into tNum return sign & (char 1 to sigFigures + 1 of tNum) &"*10^" & count end if if tNum < 1 then repeat until tNum >= 1 multiply tNum by 10 add 1 to count end repeat end if return sign & (char 1 to sigFigures + 1 of tNum) & "*10^-" & count end sci function commaFormat tNum put tNum mod 1 into remainder delete char 1 of remainder put trunc(tNum) into tNum put the number of chars in tNum into n repeat with i = 1 to trunc((n-1)/3) put comma after char n - 3*i of tNum end repeat return tNum& remainder end commaformat function intersection p1,p2,pp1,pp2 get the paramcount if it is 1 then put item 4 of p1 into pp2 put item 3 of p1 into pp1 put item 2 of p1 into p2 put item 1 of p1 into p1 end if put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of pp1 into xp1 put item 2 of pp1 into yp1 put item 1 of pp2 into xp2 put item 2 of pp2 into yp2 if x1 = x2 or xp1 = xp2 then if x1 = x2 then return x1&comma&yp2 + (x1-xp2)*(yp2-yp1)/(xp2-xp1) else return xp2&comma& y2 + (xp1-x2)*(y2-y1)/(x2-x1) end if end if if (y2-y1)/(x2-x1) = (yp2-yp1)/(xp2-xp1) then add .0000001 to y2--if lines are parallel put yp2 - y2 + x2*(y2-y1)/(x2 - x1) - xp2*(yp2 - yp1)/(xp2 - xp1) into numerator put ((y2 - y1)/(x2 - x1) -(yp2 - yp1)/(xp2-xp1)) into denom put numerator / denom into x put y2 + (x-x2) *(y2-y1)/(x2-x1) into y return x & comma & y end intersection function perpDist p1,p2,p3 put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of p3 into x3 put item 2 of p3 into y3 if x3-x2 is 0 then return (x1-x2) else put (y3-y2)/(x3-x2) into m -- The slope return (m*(x1-x2)-(y1-Y2))/sqrt(1+m*m) end if end perpDist on label inputText lock screen put the tool into tTool choose the browse tool set the textstyle of the templateField to "bold" set the style of the templateField to "transparent" set the textAlign of templateField to center put "fieldLabel" & labelCount into nField create field nField add 1 to labelCount put inputText into field nField set the loc of field nField to turtlePtToMousePt(xycor()) set the width of field nField to the formattedwidth of field nField set the height of field nField to the formattedHeight of field nField set the tool to tTool unlock screen end label function mousePtToTurtlePt theX,theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if put round(theX-x0) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end mousePtToTurtlePt function turtlePtToMousePt theX, theY get the paramcount if it is 1 then put item 2 of theX into theY put item 1 of theX into theX end if put round(x0 + theX) into item 1 of temp put round(y0 - theY) into item 2 of temp return temp end turtlePtToMousePt function clickPoint set the cursor to cross wait until mouseClick() --Wait for the mouse click. return mousePtToTurtlePt(mouseLoc()) --Return the mouse coordinates converted to turtle coordinates. end clickPoint function log x return ln(x)/ln(10) end log function fact n if n < 100 then put 1 into results repeat with i = 1 to n multiply results by i end repeat return results else return exp(n*ln(n)-n + .5*ln(2*pi*n)) end if end fact on openStack set the style of this stack to "topLevel" put 0 into waittime clean set the grid to false put 180/ pi into degPerRad put pi/180 into radPerDeg put (the width of this card)/2 into x0 put (the height of this card)/2 into y0 put pi/180 into radPerDeg put 180/pi into degPerRad choose the browse tool put the screenloc into tLoc add 35 to item 2 of tLoc set the topleft of this stack to 70,80 go to card "examples" end openStack function sine a return sin(radPerDeg* a) end sine function cosine a return cos(radPerDeg*a) end cosine function tangent a return tan(radPerDeg*a) end tangent function arcsine a return atan(a/sqrt(1-a*a))/radPerDeg end arcsine function arcTangent a return atan(a)*degPerRad end arcTangent function sum list put 0 into theResult repeat with i = 1 to the paramcount add param(i) to theResult end repeat return theResult end sum on searchAll string put the number of cards into numCards put string into ScriptFindString -- Use command G to find string put empty into list repeat with i = 1 to numCards get the script of card i if string is in it then put i&comma after list end if end repeat if list is empty then beep 2 exit searchAll end if repeat with i = 1 to the number of items in list go to card item i of list edit script of card item i of list end repeat delete last char of list put list into msg beep 2 end searchAll on sa what searchAll what end sa --function sortMy list -- repeat with i = 1 to the number of items in list -- repeat with j = i to the number of items in list -- if item j of list < item i of list then -- get item j of list -- put item i of list into item j of list -- put it into item i of list -- end if -- end repeat -- end repeat -- return list --end sortMy on pr x set the numberformat to "#.00" put x & return after field 1 end pr --function perpBisector p1,p2 -- pu -- setXY p1 -- seth toward( p2) -- fd .5*distancePt (p2) -- rt 90 -- put point into temp1 -- put item 1 of temp1 into item 1 of temp -- put item 2 of temp1 into item 2 of temp -- put heading() into item 3 of temp -- pd -- return temp --end perpBisector function perpProjPt p0,p1,p2 put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of p0 into x0 put item 2 of p0 into y0 put (y2-y1)/(x2-x1) into m put m/sqrt(1+m*m) into s --sine put 1/sqrt(1+m*m) into c -- cosine put x1+(y0-y1)*s*c+(x0-x1)*c*c into x put y1 + (y0-y1)*s*s + (x0-x1) * s * c into y return round(x),round(y) end perpProjPt function theDropPerp p1,p2 pu put xyCor() into p3 setXY p1 seth toward(p2) rt 90 setxy p3 fd 10 put xyCor() into p4 put intersection(p1,p2,p3,p4) into results setxy p3 pd return results end theDropPerp on functionKey tKey switch tKey case 1 if the tool is "browse tool" then choose the pointer tool else choose the browse tool end if break case 2 edit the script of this stack break case 3 edit the script of this card break case 5 go to next card break case 4 go to previous card break case 6 ct break end switch end functionKey FP}n revstackfalse & WGeneva UGeneva UTimesUGenevaWGenevaUGeneva0WGeneva0UTimes0WTimes$WTimes0UGeneva$UGeneva$UTimesUTimesUTimes UTimes UGenevaUGenevaWGeneva WGeneva W Arial Black WImpactWImpact UImpactUImpact U Charcoal UGeneva UArialUArialWArial WArial UArial UArial UArial WLucida Grande ULucida Grande U W cREVGeometryCachestackID18348 cREVGeneralscriptChecksum\Y debugObjectsbutton id 15006 of card id 13380 of stack "Turtle Graphics" button id 15648 of card id 15647 of stack "Turtle Graphics" button id 17954 of card id 17953 of stack "Turtle Graphics" bookmarks handlerListEShowTurtle hideTurtle startTurtle st setDragTo clearScreen cs clearText ct clean home setHome moveHome incXY setxy setRA setHeading seth left right rt lt forward myWait drawTurtle fd back bk pu penUp penDown pd toward direction direction2 arctangent2 randomInRange xycor pos xcor ycor setx sety distance heading centeredCircle startMonkey sm tellMonkey endMonkey sm startMonkey sci commaFormat intersection perpDist label mousePtToTurtlePt turtlePtToMousePt clickPoint log fact openStack sine cosine tangent arcsine arcTangent sum searchAll sa pr perpProjPt theDropPerp functionKey tempScript prevHandler hideTurtlescriptSelectionchar 275 to 274scriptS<

global x0,y0,angl,penDown,x,y

local penDown1,xsave,ysave,asave,penDownSave,labelcount

global radPerDeg,degPerRad,noDraw,waittime

local x1,y1,A1

--You may be puzzle by "drag from 0,0 to 0,0" in the handlers below, and "set the Lockscreen to true"

--Don't ask.

on ShowTurtle

put false into noDraw

show graphic "turtleGraphic"

end ShowTurtle

on hideTurtle

put true into noDraw

hide graphic "turtleGraphic"

end hideTurtle

on startTurtle

clean

put true into penDown

put (the width of this card)/2 into x0

put (the height of this card)/2 into y0

put 0 into x

put 0 into y

put 0 into angl

if there is no graphic "turtleGraphic" then

set the style of the templateGraphic to "line"

if there is no graphic "turtleGraphic" then create graphic "turtleGraphic"

set the endArrow of graphic "turtleGraphic" to true

set the arrowsize of graphic "turtleGraphic" to 5

end if

choose pencil tool

end startTurtle

on st

startTurtle

end st

on setDragTo temp

if temp >20 then

put 20 into waitTime

exit setDragTo

end if

if temp < 0 then

put 0 into waitTime

exit setDragTo

end if

put temp into waitTime

end setDragTo

on clearScreen

clean

end clearScreen

on cs

clean

end cs

on clearText

ct

end clearText

on ct

put empty into field "data"

end ct

on clean

ct

lock screen

repeat while the number of images > 0

delete image 1

end repeat

put 1 into i

repeat while i <= the number of fields

if "fieldLabel" is in word 2 of the name of field i

then delete field i

else add 1 to i

end repeat

put 1 into labelCount

unlock screen

end clean

on home

setxy 0,0

put 0 into angl

drawTurtle

end home

on setHome xx,yy

put (the width of this stack)/2 + xx into x0

put (the height of this stack)/2 - yy into y0

drawturtle

end setHome

on moveHome dx,dy

add dx to x0

add -dy to y0

drawturtle

end moveHome

on incXY dx,dy

--set the lockscreen to true

if penDown then drag from (x0 + x),(y0 - y) to (x0 +x +dx) ,(y0 -y - dy)

--else drag from 0,0 to 0,0

add dx to x

add dy to y

drawTurtle

--set the lockscreen to false

end incXY

on setxy xnew,ynew

get the paramCount

if it = 1 then

put item 2 of xnew into ynew

put item 1 of xnew into xnew

end if

--set the lockscreen to true

if penDown then drag from (x0 + x),(y0 - y) to (x0 +xnew),(y0 - ynew)

--else drag from 0,0 to 0,0

put xnew into x

put ynew into y

drawTurtle

--set the lockscreen to false

end setxy

on setRA tRadius, tAngle

put tRadius*cosine(tAngle) into tx

put tRadius*sine(tAngle) into ty

setXY tX,tY

end setRA

on setHeading temp

seth temp

end setHeading

on seth anglnew

put anglnew into angl

drawTurtle

end seth

on left dangl

lt dangl

end left

on right dangl

rt dangl

end right

on rt dangl

subtract dangl from angl

drawTurtle

end rt

on lt dangl

add dangl to angl

drawTurtle

end lt

on forward distance

fd distance

end forward

on myWait temp

if temp = 0 then exit myWait

wait temp

end myWait

on drawTurtle

myWait waitTime

if noDraw then exit drawturtle

put 5 into distance

put round(x0 +x)&comma& round(-y+y0) & return into gPoints

put distance * cos(radPerDeg * angl) into dx

put distance * sin(radPerDeg * angl) into dy

put round(x+x0+dx)&comma&round(-y+y0-dy) after gPoints

set points of graphic "turtleGraphic" to gPoints

end drawTurtle

on fd distance

put distance * cos(radPerDeg * angl) into dx

put distance * sin(radPerDeg * angl) into dy

--set the lockscreen to true

if penDown then drag from (x0 + x),(y0 - y) to (x0 + x + dx), (y0 - y - dy)

--else drag from 0,0 to 0,0

add dx to x

add dy to y

drawturtle

--set the lockscreen to false

end fd

on back distance

forward -distance

end back

on bk distance

back distance

end bk

on pu

put false into penDown

end pu

on penUp

pu

end penUp

on penDown

pd

end penDown

on pd

put true into penDown

end pd

function toward xtemp,ytemp

get the paramCount

if it is 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

put ytemp - y into dy

put xtemp - x into dx

if dx = 0 then

if dy > 0 then return 90

else return 90 + 180

end if

if dy = 0 then

if dx > 0 then return 0

else return 180

end if

put degPerRad * atan(abs(dy) / abs(dx)) into angl

if dy > 0 then

if dx > 0 then return angl

else return 180 - angl

end if

if dx > 0 then

return 360 - angl

else

return 180 + angl

end if

end toward

function direction xtemp,ytemp

get the paramCount

if it is 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

put ytemp - y into dy

put xtemp - x into dx

if dx = 0 then

if dy > 0 then return 90

else return 90 + 180

end if

if dy = 0 then

if dx > 0 then return 0

else return 180

end if

put degPerRad * atan(abs(dy) / abs(dx)) into angl

if dy > 0 then

if dx > 0 then return angl

else return 180 - angl

end if

if dx > 0 then

return 360 - angl

else

return 180 + angl

end if

end direction

function direction2 xtemp,ytemp

get the paramCount

if it is 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

put ytemp - y into dy

put xtemp - x into dx

put arctangent2(dy,dx) into tAngle

if tAngle < 0 then return 360 + tAngle

else return tAngle

end direction2

function arctangent2 ty,tx

return degPerRad * atan2(ty,tx)

end arctangent2

function randomInRange b,t

return random(t-b+1) + b-1

end randomInRange

function xycor

return x & comma & y

end xycor

function pos

return x & comma & y

end pos

function xcor

return x

end xcor

function ycor

return y

end ycor

on setx xnew

--set the lockscreen to true

if penDown then drag from (x0 + x),(y0 - y) to (x0 +xnew),(y0 - y)

--else drag from 0,0 to 0,0

put xnew into x

drawTurtle

--set the lockscreen to false

end setx

on sety ynew

--set the lockscreen to true

if penDown then drag from (x0 + x),(y0 - y) ¬

to (x0 +x),(y0 - ynew)

--else drag from 0,0 to 0,0

put ynew into y

drawTurtle

--set the lockscreen to false

end sety

function distance xtemp,ytemp

get the paramCount

if it = 1 then

put item 2 of xtemp into ytemp

put item 1 of xtemp into xtemp

end if

return sqrt ((x-xtemp)^2 + (y-ytemp)^2)

end distance

function heading

repeat while angl >360

subtract 360 from angl

end repeat

repeat while angl < 0

add 360 to angl

end repeat

return angl

end heading

on centeredCircle r

put the tool into savedTool

set the filled to false

set the centered to true

choose the oval tool

drag from (x0+x),(y0-y) to (x0+x+r),(y0-y-r)

set the centered to false

choose the savedTool

end centeredCircle

on startMonkey

put 0 into x1

put 0 into y1

put 0 into A1

put true into penDown1

end startMonkey

on sm

startMonkey

end sm

on tellMonkey

put x into xsave

put y into ysave

put angl into asave

put penDown into penDownSave

put x1 into x

put y1 into y

put a1 into angl

put penDown1 into penDown

end tellMonkey

on endMonkey

put x into x1

put y into y1

put angl into a1

put penDown into penDown1

put xsave into x

put ysave into y

put asave into angl

put penDownSave into penDown

end endMonkey

on sm

put 0 into x1

put 0 into y1

put 0 into a1

put true into penDown1

end sm

on startMonkey

sm

end startMonkey

function sci tNum,sigFigures

if tNum < 0 then

put "-" into sign

else put empty into sign

put abs(tNum) into tNum

if sigFigures is empty then put 3 into sigFigures --Default significant figures.

put 0 into count

if tNum >= 1 then

repeat until tNum < 10

divide tNum by 10

add 1 to count

end repeat

put round((10^(sigFigures-1))*tNum)/10^(sigFigures-1) into tNum

return sign & (char 1 to sigFigures + 1 of tNum) &"*10^" & count

end if

if tNum < 1 then

repeat until tNum >= 1

multiply tNum by 10

add 1 to count

end repeat

end if

return sign & (char 1 to sigFigures + 1 of tNum) & "*10^-" & count

end sci

function commaFormat tNum

put tNum mod 1 into remainder

delete char 1 of remainder

put trunc(tNum) into tNum

put the number of chars in tNum into n

repeat with i = 1 to trunc((n-1)/3)

put comma after char n - 3*i of tNum

end repeat

return tNum& remainder

end commaformat

function intersection p1,p2,pp1,pp2

get the paramcount

if it is 1 then

put item 4 of p1 into pp2

put item 3 of p1 into pp1

put item 2 of p1 into p2

put item 1 of p1 into p1

end if

put item 1 of p1 into x1

put item 2 of p1 into y1

put item 1 of p2 into x2

put item 2 of p2 into y2

put item 1 of pp1 into xp1

put item 2 of pp1 into yp1

put item 1 of pp2 into xp2

put item 2 of pp2 into yp2

if x1 = x2 or xp1 = xp2 then

if x1 = x2 then

return x1&comma&yp2 + (x1-xp2)*(yp2-yp1)/(xp2-xp1)

else

return xp2&comma& y2 + (xp1-x2)*(y2-y1)/(x2-x1)

end if

end if

if (y2-y1)/(x2-x1) = (yp2-yp1)/(xp2-xp1) then add .0000001 to y2--if lines are parallel

put yp2 - y2 + x2*(y2-y1)/(x2 - x1) - xp2*(yp2 - yp1)/(xp2 - xp1) into numerator

put ((y2 - y1)/(x2 - x1) -(yp2 - yp1)/(xp2-xp1)) into denom

put numerator / denom into x

put y2 + (x-x2) *(y2-y1)/(x2-x1) into y

return x & comma & y

end intersection

function perpDist p1,p2,p3

put item 1 of p1 into x1

put item 2 of p1 into y1

put item 1 of p2 into x2

put item 2 of p2 into y2

put item 1 of p3 into x3

put item 2 of p3 into y3

if x3-x2 is 0 then

return (x1-x2)

else

put (y3-y2)/(x3-x2) into m -- The slope

return (m*(x1-x2)-(y1-Y2))/sqrt(1+m*m)

end if

end perpDist

on label inputText

lock screen

put the tool into tTool

choose the browse tool

set the textstyle of the templateField to "bold"

set the style of the templateField to "transparent"

set the textAlign of templateField to center

put "fieldLabel" & labelCount into nField

create field nField

add 1 to labelCount

put inputText into field nField

set the loc of field nField to turtlePtToMousePt(xycor())

set the width of field nField to the formattedwidth of field nField

set the height of field nField to the formattedHeight of field nField

set the tool to tTool

unlock screen

end label

function mousePtToTurtlePt theX,theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

put round(theX-x0) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end mousePtToTurtlePt

function turtlePtToMousePt theX, theY

get the paramcount

if it is 1 then

put item 2 of theX into theY

put item 1 of theX into theX

end if

put round(x0 + theX) into item 1 of temp

put round(y0 - theY) into item 2 of temp

return temp

end turtlePtToMousePt

function clickPoint

set the cursor to cross

wait until mouseClick() --Wait for the mouse click.

return mousePtToTurtlePt(mouseLoc()) --Return the mouse coordinates converted to turtle coordinates.

end clickPoint

function log x

return ln(x)/ln(10)

end log

function fact n

if n < 100 then

put 1 into results

repeat with i = 1 to n

multiply results by i

end repeat

return results

else

return exp(n*ln(n)-n + .5*ln(2*pi*n))

end if

end fact

on openStack

set the style of this stack to "topLevel"

put 0 into waittime

clean

set the grid to false

put 180/ pi into degPerRad

put pi/180 into radPerDeg

put (the width of this card)/2 into x0

put (the height of this card)/2 into y0

put pi/180 into radPerDeg

put 180/pi into degPerRad

choose the browse tool

put the screenloc into tLoc

add 35 to item 2 of tLoc

set the topleft of this stack to 70,80

go to card "examples"

end openStack

function sine a

return sin(radPerDeg* a)

end sine

function cosine a

return cos(radPerDeg*a)

end cosine

function tangent a

return tan(radPerDeg*a)

end tangent

function arcsine a

return atan(a/sqrt(1-a*a))/radPerDeg

end arcsine

function arcTangent a

return atan(a)*degPerRad

end arcTangent

function sum list

put 0 into theResult

repeat with i = 1 to the paramcount

add param(i) to theResult

end repeat

return theResult

end sum

on searchAll string

put the number of cards into numCards

put string into ScriptFindString -- Use command G to find string

put empty into list

repeat with i = 1 to numCards

get the script of card i

if string is in it then

put i&comma after list

end if

end repeat

if list is empty then

beep 2

exit searchAll

end if

repeat with i = 1 to the number of items in list

go to card item i of list

edit script of card item i of list

end repeat

delete last char of list

put list into msg

beep 2

end searchAll

on sa what

searchAll what

end sa

--function sortMy list

-- repeat with i = 1 to the number of items in list

-- repeat with j = i to the number of items in list

-- if item j of list < item i of list then

-- get item j of list

-- put item i of list into item j of list

-- put it into item i of list

-- end if

-- end repeat

-- end repeat

-- return list

--end sortMy

on pr x

set the numberformat to "#.00"

put x & return after field 1

end pr

--function perpBisector p1,p2

-- pu

-- setXY p1

-- seth toward( p2)

-- fd .5*distancePt (p2)

-- rt 90

-- put point into temp1

-- put item 1 of temp1 into item 1 of temp

-- put item 2 of temp1 into item 2 of temp

-- put heading() into item 3 of temp

-- pd

-- return temp

--end perpBisector

function perpProjPt p0,p1,p2

put item 1 of p1 into x1

put item 2 of p1 into y1

put item 1 of p2 into x2

put item 2 of p2 into y2

put item 1 of p0 into x0

put item 2 of p0 into y0

put (y2-y1)/(x2-x1) into m

put m/sqrt(1+m*m) into s --sine

put 1/sqrt(1+m*m) into c -- cosine

put x1+(y0-y1)*s*c+(x0-x1)*c*c into x

put y1 + (y0-y1)*s*s + (x0-x1) * s * c into y

return round(x),round(y)

end perpProjPt

function theDropPerp p1,p2

pu

put xyCor() into p3

setXY p1

seth toward(p2)

rt 90

setxy p3

fd 10

put xyCor() into p4

put intersection(p1,p2,p3,p4) into results

setxy p3

pd

return results

end theDropPerp

on functionKey tKey

switch tKey

case 1

if the tool is "browse tool" then

choose the pointer tool

else

choose the browse tool

end if

break

case 2

edit the script of this stack

break

case 3

edit the script of this card

break

case 5

go to next card

break

case 4

go to previous card

break

case 6

ct

break

end switch

end functionKey

 Examples POn preOpencard clean hideTurtle set thumbposition of scrollbar "ScrollBarDrag" to 0 end preOpencard on tabKey if the controlKey is down then edit the script of this stack if the optionkey is down then edit the script of this card pass tabKey end tabKey }ncREVGeometryCacheIDs010396286796784320101456685362915781014566848360157510153864211583747100488895454710051014570266781159110023070666821007101543052974138481015174119711304510145713171441611101494095176124481018105258997410410023196712361004100488400807254901005761339407101310145668520541577101536791869835851014567613629158910023198146891003101494083951024461014566850363157610146380461621912114410206214218007101867307939941681039736929672462710153699591013632101456760725015881144102375900244711441023759012449114410237590224501042916447162569411441023759032451114410237589310101144102375904246111441023758941573114410237589518921144102375905388211441023758961914114410237590639421144102375897207611441023759073970104111695865554161144102375898224411441023759084036114410237589922761144102375909714011441023759101226510145706769941608cREVGeometrycachetotal48order  cREVGeneralK%'()*457Hdxz        0*f(r>/FWLhelp @33}ncREVGeometryCacheIDs10146405715242033100514349907516141005143486413161310396286796784320101464014029120321005143503767161510186730793994168cREVGeometrycachetotal7order cREVGeneralMNOAtaboo P local tList,aaChild,abChild,acChild,adChild,bbChild,bcChild,bdChild,ccChild,cdChild,ddChild,n on taboo ct put empty into results put 0 into deaths repeat ask "How many do you wish in the sample? (< 1,001)" with 500 if it is empty then beep exit taboo end if if it >1000 then next repeat else put it into n exit repeat end if end repeat pr pr pr "Please wait." set the cursor to clock put "ab" into father put "cd" into mother put "aaChild,bbChild,ccChild,ddChild,abChild,acChild,adChild,bcChild,bdChild,cdChild" into tList repeat with i = 1 to the number of items in tList do "put 0 into" && item i of tList end repeat put 0 into j repeat n add 1 to j put char random(2) of father into char 1 of son put char random(2) of mother into char 2 of son put char random(2) of father into char 1 of daughter put char random(2) of mother into char 2 of daughter put char random(2) of son into char 1 of child put char random(2) of daughter into char 2 of child --add 1 to child switch child case "aa" add 1 to aaChild break case "ab" add 1 to abChild break case "ba" add 1 to abChild break case "ac" add 1 to acChild break case "ca" add 1 to acChild break case "ad" add 1 to adChild break case "da" add 1 to adChild break case "bb" add 1 to bbChild break case "bc" add 1 to bcChild break case "cb" add 1 to bcChild break case "bd" add 1 to bdChild break case "db" add 1 to bdChild break case "cc" add 1 to ccChild break case "cd" add 1 to cdChild break case "dc" add 1 to cdChild break case "dd" add 1 to ddChild break end switch put child & space after results plot tList,j end repeat ct set the numberformat to "0.##" pr "The percentage deaths in this sample of "&n& " would be " & 100*value(aaChild)/n &"%" pr repeat with i = 1 to the number of items in tList pr item i of tList & " = " & value(item i of tList)/n*100&"%" end repeat send "choose the browse tool" to me in 1 tick end taboo on plot tList,j put the bottom of field "aaChild" into tBottom repeat with i = 1 to the number of items in tList put item i of tList into tField put value(tField) into tValue set the height of field tField to 1000*tValue/j set the bottom of field tField to tBottom end repeat end plot on pr temp put temp & return after field "temp" end pr on ct put empty into field "temp" end ct on opencard ct put "aaChild,bbChild,ccChild,ddChild,abChild,acChild,adChild,bcChild,bdChild,cdChild" into tList repeat with i = 1 to the number of items in tList do "put 0 into" && item i of tList end repeat plot tList,1 set the numberformat to "0.##" end opencard on drawHeritage st put mousePttoturtlePt("80,60") into pt sethome item 1 of pt, item 2 of pt seth -45 fd 100 put xycor() into place setxy xcor(),0 setxy 0,item 2 of place setxy item 1 of place/2, 2* item 2 of place setxy place home setxy 0,item 2 of place choose the browse tool end drawHeritage }ncREVGeometryCacheIDs81144102802171391710396286796784320114410280217239181144102802173391911441028021743920114410280217539251144102802176392610157069251813911114410280217739271144102802178392811441028021793929114410280218039301041211210479545411441028021813931114410280218239321144102802183393311441028021843936114410280218539371144102802186393811441028021873939114410280218839401041092371418535411441028022004154101824455614041471144102802190414211441028021894001114410280220141551144102802191414311441028022024156114410280219241441144102802203415811441028021934145114410280220485501144102802194414611441028021954148114410280219641491018240756678413210157100437023941114410280219741511144102802198415211441028021994153101562786425739071018673079399416810157087385523934104284430100256491015628296329390810157178089403946101570841025339241144102802166391210023069127593906114410280216739131015708761269393510182443022304141114410280216839141144102802170391611441028021693915cREVGeometryCachetotal56order cREVGeneralBCDGHIJKLMNOPTUVWXYZ[\]^_`abcdej$-./012345789:;<>N!f card id 4100 P;on opencard set the scroll of field 2 to 0 end opencard }ncREVGeometryCacheIDs1039628679678432010146405715244105101810452555441011018104545036410310186730793994168cREVGeometryCachetotal5order cREVGeneral R radioactive Pxon preOpencard if there is a button "unlock screen?" then send "mouseUp" to button "unlock screen?" end preOpencard }ncREVGeometryCacheIDsY11009901680941765011009901679941764711009901696261768311009901737671771811009901724101770711009901682621765511009901712101769711009901677011763911009901693211768111009901716801770111009901687501766811009901689131767211009901728921771111009901678621764311009901736341771711009901681261765111009901691691767811009901704841769111009901684431766011009901685951766411009901696491768411441028042959258110099017301217712114410280429617680110099016950317682110099017097017695110099016772217640110099017228317706110099016829817656110099016903717675101867307939941681100990173504177161100990171559177001014640571524723411009901727681771011009901703591769011009901710891769611009901686341766511009901678961764411009901692131767911009901687901766911009901681621765211009901689531767311009901699961768711009901684801766111009901708491769411009901683321765711009901721621770510396286796784320110099016802617648110099017337417715110099017144117699110099016793017645110099017265117709110099017023917689110099017071817693110099017192517703110099016987217686110099016882917670110099016908317676110099016851717662110099016819617653110099016867417666110099016836517658110099016899517674110099017324817714110099017204417704104310367449466811043248514370925710430043920976472110099016779817641110099016974317685110099016806217649110099016796317646110099017180017702110099017252917708110099017011817688110099016822917654110099016912417677110099016871217667110099017389717719110099017133517698110099017059817692110099016855717663110099016840517659110099016887217671110099016783117642110099017313017713104325072128910299cREVGeometryCachetotal89order cREVGeneralHB$)$*(;DDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEE E E E E EEEEEEEEEEEEEEEEEEE E!E"E#E$E%E&E'E(E)E*E+E,E-E.E/E0E1E2E3E4E5E6E7.zplot @}ncREVGeometryCacheIDs1039628679678432010732384190021492210732384186591491810432535684401190011441028055251493310432559992761194110732384190441492310732384187471492010186730793994168107323841971914931101464057152412264107323841967614930107323841908814924107323841976414932107323841933714926107323842002614934107323841942414928107323841938014927107323842011514936107323842007014935107323841870314919104325354105611899cREVGeometryCachetotal22order.{.|./:F:G:H:J:K:L:N:O:P:R:S:T:U:V:W:X2 @}ncREVGeometryCacheIDs1039628679678432011441028063281301211441028063301301611441028063291301411441028063311301710453268769821301510453267686251301310186730793994168104532555886713006104532549755412999104532520880612998114410280631713000114410280631813001114410280632013003114410280631913002114410280632113004114410280632213005114410280632313007114410280632413008114410280632513009114410280632613010114410280632713011cREVGeometryCachetotal22order222222222222222222222 @}ncREVGeometryCacheIDs1039628679678432011441028078601460610480280073921301910480280595831302010186730793994168cREVGeometryCachetotal5order22F2 P3 }ncREVGeometryCacheIDs1144102808694130361039628679678432010481647872651303010481649057691303110186730793994168cREVGeometryCachetotal5order cREVGeneral2223 @}ncREVGeometryCacheIDs1039628679678432010498105151771308010498440185681307910498453550341308911441028095021460810498444322931308310498443957341308210186730793994168cREVGeometryCachetotal8order33333!F3card id 13232 @}ncREVGeometryCacheIDs1039628679678432011441028102711325411441028102721327011441028102731328111441028102741451611441028102751451711441028102761451811441028102771451911441028102781452010499336133051325010499325603761323410186730793994168114410281027914611104993211527413233107288710155514612104993644713913265104993527113213251104993349861313249104993281246613248114410281026913252114410281027013253cREVGeometryCachetotal21order cREVGeneral33333333333388888FF4Dcard id 13380 P  on ShakeCoins N,M ct put the width of this stack into screenWidth put the height of this stack into screenHeight put .5 into yScale put 400 into xScale --put 10 into N put M into numShakes -- put (10,100,200,1000)into tList -- put 10,100,500,1000 into tList st --repeat with j = 1 to the number of items in tList --put item j of tList into N pu put N/2 into m setxy xScale*m/N,ySCALE* sqrt(2*N/pi)*exp(-2*m*m/N) put xcor() into tRight put -N/2 into m setxy xScale*m/N,ySCALE* sqrt(2*N/pi)*exp(-2*m*m/N) put xcor() into tLeft put (tRight - tLeft)/10 into tWidth --if there is no field "column5" then create field "column5" repeat with i = 0 to 10 put "column" & i*10 into tName if there is no field tName then create field tName set the loc of field tName to ScreenWidth/2 + tWidth*(i-5),0 set the height of field tName to 0 set the width of field tName to tWidth set the bottom of field tName to screenHeight/2 set the FieldHeight of field tName to 0 set the backgroundcolor of field tName to "red" set the showborder of field tName to false end repeat set the backgroundcolor of field "column50" to "green" set the width of field "column0" to tWidth/2 set the right of field "column0" to left of field "column10" set the width of field "column100" to tWidth/2 set the left of field "column100" to right of field "column90"--ScreenWidth/2 + tWidth*(-5) -- choose the browse tool -- exit mouseUP repeat numShakes times put 0 into tNumberOfHeads repeat N if random(2) = 1 then add 1 to tNumberOfHeads end repeat --pr tNumberOfHeads put tNumberOfHeads/N*100 into tPercentageHeads -- pr tPercentageHeads -- pr put round(tPercentageHeads) into tPercentageHeads put round(tPercentageHeads/10) into theChar put "column" & theChar & "0" into tName -- pr tPercentageHeads -- pr tName -- pr tFieldHeight -- pr if tName is "column00" then put "column0" into tName set the FieldHeight of field tName to the FieldHeight of field tName + .3 set the height of field tName to round(the FieldHeight of field tName) set the bottom of field tName to screenHeight/2 end repeat choose the browse tool end shakeCoins }ncREVGeometryCacheIDs1039628679678432010735734483601516710734443410671499110735820325451544910734441197231498410186730793994168107344417128614986107357344816715159107357344821415161107344505411615004107349453847215006114410281153315577107357344828615164107357344833515166107344410030314983107344516023715005107357344826215163107344403636314969107357405149715176107344366325114949107357344831015165105042515735813381107344476124415003105042583287413382107357344838515168107357344819115160105042658382213401107357344823815162cREVGeometryCachetotal28order cREVGeneral4E4F4Y:e:y::::::::;7;8;9;:;;;<;=;>;?;@;H=?=x={=H @}ncREVGeometryCacheIDs!1099929408122169131039628679678432010999294081941691610875049746721572710999294077851689810999294080501691010999294082171691710999294078751690210999294083721692310999294082921692010999294078081689910999294079621690610941588308491574710999294081471691410874861191231569010999294080731691110999294083181692110999294082411691810999294078971690310999294080071690810999294078291690010999294083971692410186730793994168109992940798416907109992940791816904109992940817216915109992940809616912109992940842316925109992940802916909109992940834516922109992940785116901109992940826616919109992940793916905cREVGeometryCachetotal33order=J=o=GHGIGJGKGLGMGNGOGPGQGRGSGTGUGVGWGXGYGZG[G\G]G^G_G`GaGbGcEJ @}ncREVGeometryCacheIDs1039628679678432011039200073161787511039200070371787211035836696321779311017765935541775210186730793994168114410281920617869110177520530817739110392000720917874110392000683317870110392000713217873110372721623217810110392000693417871110177541178417741cREVGeometryCachetotal14order cREVGeneralEKEMEXEEGtGuGvGwGxGyGzE @}ncREVGeometryCacheIDs1105193146458179401039628679678432011051201410921789411441028203741793911051200244651789310186730793994168cREVGeometryCachetotal6orderEEG}G~F! @}ncREVGeometryCacheIDs1122656969090179541039628679678432011226572507231795811226945296141796511441028213101796411226571368381795510186730793994168cREVGeometryCachetotal7orderF"F#F&F-GF. @}ncREVGeometryCacheIDs1187620852691180681039628679678432011227791268311796811227788070341796710186730793994168cREVGeometryCachetotal5orderF/F0GFG @}ncREVGeometryCacheIDs1039628679678432011229257213631799211876208795161806911229257186891797810186730793994168cREVGeometryCachetotal5orderF:FHFFJ Pffunction rectCor r,ang put r*cosine(ang) into x put r*sine(ang) into y return x,y end rectCor }ncREVGeometryCacheIDs1039628679678432011307577258871800411307569278051799511307573207921799610186730793994168cREVGeometryCachetotal5order cREVGeneralFKFLFTG @}ncREVGeometryCacheIDs1039628679678432011878287979701834511876210265921830611878288000631834411876213688361830710186730793994168cREVGeometrycacheorder total6GGGG)Keplers 2'nd lawEq^on mouseUP answer "The radius sweeps out equal areas in equal times." ct st traj 0,11 send "choose the browse tool" to me in 1 tick end mouseUP on traj vx,vy pu home pd pu setxy 90, 0 pd put distance(0,0) into newRadius seth direction(0,0) repeat 63 put heading() into oldHeading put newRadius into oldRadius put xyCor() into oldPosition setxy 0,0 setxy oldPosition incXY vx,vy put distance(0,0) into newRadius put (newRadius + oldRadius)/2 into radius seth direction(0,0) put heading() into newHeading pr "Area = " & round(radius^2 * (newHeading - oldHeading)/2) add accx() to vx add accy() to vy end repeat end traj function accx -- Newton's law of gravity return -8100 * xcor()/ distance(0,0)^3 end accx function accy return -8100 * ycor()/ distance(0,0)^3 end accy 5 cREVGeneral revUniqueID 1014566852054 Right Angle in CircleEqon mouseUP st ct put 200 into L repeat 5 times centeredCircle L fd L bk 2*L pu fd L seth randomInRange(10,170) fd L put xyCor() into pointOnCircum label "Angle = " & direction(L,0) - direction(-L,0) pd setxy L,0 setxy pointOnCircum setxy -L,0 home end repeat send "choose the browse tool" to me in 1 tick end mouseUp T cREVGeneral revUniqueID 1005761339407 Perpendicular bisectorsEq,on mouseUp answer "Click at any three points to create a triangle." st pu --Set the three vertices of the triangle repeat with i =0 to 2 put clickPoint() into a[i] setxy a[i] pd end repeat --Find three midpoints setXY a[0] pu repeat with i = 0 to 2 setxy midPoint(a[i], a[(i+1) mod 3]) label "Midpoint" put xyCor() into mp[i,(i+1) mod 3] --Find point on perpendicular to the line seth direction(a[i]) lt 90 pd fd 200 put xyCor() into pointOnPerp[i] pu end repeat put intersection(mp[0,1],pointOnPerp[0],mp[1,2],pointOnPerp[1]) into tCenter setxy tCenter label "Center of circumscribed circle" --Get ditance from the intersection to any of the three lines. put distance(a[1]) into r centeredcircle r send "choose the browse tool" to me in 1 tick end mouseUP function midPoint a,b put avg(item 1 of a, item 1 of b) into x put avg(item 2 of a, item 2 of b) into y return x,y end midPoint function bisector b,c return avg(direction(b),direction(c)) end bisector commandfalseRcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertrue mnemonic0rect 10,597,90,617armFillfalse patterns colors showIconfalse showNametrueshadowfalse sharedHilitetrue textAligncentermenuMouseButton1id1242altId0 labelWidth0 accelKeynumber5 textStylelockLocfalsearmfalse autoHilitetruelabel showHilitefalsestylestandard armBordertrueicon0nameLine bisectorstoolTip accelTextlayer6 borderWidth2 cantSelectfalsevisibletruehilitefalse menuLines5margins4 accelModscommandopaquetruedefaultfalse shadowOffset4 hiliteFilltrue menuName showBordertrue disabledfalse hiliteIcon0 textSizeautoArmfalsefamily0 menuMode textFont menuHistory1 cREVGeneralscriptChecksum`5ó!9nD bookmarks revUniqueID 1144102375893 handlerListmouseUp midPoint bisectorscriptSelectionchar 466 to 465 prevHandlerbisector tempScriptscript

on mouseUp

answer "Click at any three points to create a triangle."

st

pu

--Set the three vertices of the triangle

repeat with i =0 to 2

put clickPoint() into a[i]

setxy a[i]

pd

end repeat

--Find three midpoints

setXY a[0]

pu

repeat with i = 0 to 2

setxy midPoint(a[i], a[(i+1) mod 3])

label "Midpoint"

put xyCor() into mp[i,(i+1) mod 3]

--Find point on perpendicular to the line

seth direction(a[i])

lt 90

pd

fd 200

put xyCor() into pointOnPerp[i]

pu

end repeat

put intersection(mp[0,1],pointOnPerp[0],mp[1,2],pointOnPerp[1]) into tCenter

setxy tCenter

label "Center of circumscribed circle"

--Get ditance from the intersection to any of the three lines.

put distance(a[1]) into r

centeredcircle r

send "choose the browse tool" to me in 1 tick

end mouseUP

function midPoint a,b

put avg(item 1 of a, item 1 of b) into x

put avg(item 2 of a, item 2 of b) into y

return x,y

end midPoint

function bisector b,c

return avg(direction(b),direction(c))

end bisector

 Spin polygonEqon mouseUp st put 12 into n repeat n times poly n,50 left 360/n end repeat send "choose the browse tool" to me in 1 tick end mouseUp on poly tnum,L repeat tnum times fd L left 360/tnum end repeat end poly commandfalseVcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertruerect 10,537,90,557 mnemonic0armFillfalse patterns showNametrue showIconfalsecolors sharedHilitetrueshadowfalse textAligncentermenuMouseButton1id1004altId0 labelWidth0number1 accelKey textStylelockLocfalse showHilitefalselabel autoHilitetruearmfalsestylestandard armBordertruename Spin polygonicon0toolTiplayer2 accelTextvisibletrue cantSelectfalse borderWidth2hilitefalse menuLines5margins4opaquetrue accelModscommand shadowOffset4defaultfalse menuName hiliteFilltrue showBordertrue textSize hiliteIcon0 disabledfalseautoArmfalse menuModefamily0 textFont menuHistory1 cREVGeneral revUniqueID 1002307066682 QuadralateralEqpon mouseUp answer "Click at four points on the screen. What can you say about the quadralateral joining the midpoints?" st pu -- Set and connect four points of a rectangle repeat with i = 0 to 3 put clickPoint() into a[i] setxy a[i] pd end repeat -- Find and connect midpoints setXY a[0] repeat with i = 0 to 4 setxy midPoint(a[i mod 4], a[(i+1) mod 4]) label "Midpoint" end repeat send "choose the browse tool" to me in 1 tick end mouseUP function midPoint a,b put avg(item 1 of a, item 1 of b) into x put avg(item 2 of a, item 2 of b) into y return x,y end midPoint commandfalseTcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertruerect 10,620,90,640 mnemonic0armFillfalse patterns showNametrue showIconfalsecolors sharedHilitetrueshadowfalse textAligncentermenuMouseButton1id1285altId0 labelWidth0number6 accelKey textStylelockLocfalse showHilitefalselabel autoHilitetruearmfalsestylestandard armBordertruename Quadralateralicon0toolTiplayer8 accelTextvisibletrue cantSelectfalse borderWidth2hilitefalse menuLines5margins4opaquetrue accelModscommand shadowOffset4defaultfalse menuName hiliteFilltrue showBordertrue textSize hiliteIcon0 disabledfalseautoArmfalse menuModefamily0 textFont menuHistory1 cREVGeneral revUniqueID 1004888954547 Planetary orbitEqon mouseUp startTurtle orbit 0, 12 send "choose the browse tool" to me in 1 tick end mouseUp on mouseLeave Hide field "display" end mouseLeave on orbit vx, vy setHome 0,0 Label "Sun" penUp forward 90 penDown add accx()/2 to vx -- Midpoint approximatin add accy()/2 to vy -- Midpoint approximation --put the ticks into starttime repeat 238 --wait 0 ticks incXY vx, vy add accx() to vx add accy() to vy end repeat -- pr the ticks - starttime end orbit function accx -- Newton's law of gravity return -8100 * xcor()/ distance(0,0)^3 end accx function accy return -8100 * ycor()/ distance(0,0)^3 end accy commandfalseRcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertruerect 10,517,90,537 mnemonic0armFillfalse patterns showNametrue showIconfalsecolors sharedHilitetrueshadowfalse textAligncentermenuMouseButton1id1040altId0 labelWidth0number3 accelKey textStylelockLocfalse showHilitefalselabel autoHilitetruearmfalsestylestandard armBordertruenamePlanetary orbiticon0toolTiplayer4 accelTextvisibletrue cantSelectfalse borderWidth2hilitefalse menuLines5margins4opaquetrue accelModscommand shadowOffset4defaultfalse menuName hiliteFilltrue showBordertrue textSize hiliteIcon0 disabledfalseautoArmfalse menuModefamily0 textFont menuHistory1 cREVGeneral revUniqueID 1002319814689 *Bridge mechanicsEqlocal dx,incSlope,horizontalLoad,bridgeWidth on mouseUp ask "What is the verticle load? (We will design a bridge to carry this load.)" with 200 bridge it send "choose the browse tool" to me in 1 tick end mouseUp on bridge totalWeight put totalWeight into w st pu home put 600 into bridgeWidth put w/200 into density --Convenient weight density of the bridge. put 300 into horizontalLoad -- Maximum horizontal load supported by the end towers. put 10 into dx -- Distance between successive support cables. --And now the physics. It assumes tower supports capable of a given, fixed --resistance to a horizontal load. put density*dx/horizontalLoad into incSlope setxy 0,0 pd seth 90 stepIt 0, 1 stepIt 0 , -1 end bridge on stepIt slope, sign repeat with i = 1 to bridgeWidth/dx/2 setxy (xcor() + dx * sign),ycor() + dx * slope put ycor() into height bk height --Draw cable fd height add incSlope to slope end repeat bk height setx 0 end stepit d cREVGeneral revUniqueID 1014566853629 4 PolygonsEqon mouseUp startTurtle ask "How many sides?" put it into N put 800 into circumference set the dragspeed to 200 repeat N fd circumference/N lt 360/N end repeat send "choose the browse tool" to me in 1 tick end mouseUp  cREVGeneral revUniqueID 1014567607250 M New Field 1)`,F cREVGeneral revUniqueID 1005143486413 L 0 Commands [and their abreviations]  !  forward 100 [fd 100]   4Moves the turtle 100 pixels at the current heading. 3 back 100 [bk 100]   9Moves the turtle back 100 pixels at the current heading. 8 right 30 [rt 30]   8Rotates the turtle clockwise through a 30 degree angle. 7 left 30 [lt 30]   ?Rotates the turtle counterclockwise through a 30 degree angle. > setHeading 45 [seth 45]   Directs the turtle to an angle of 45 degrees. (All angles are measured in the usual Cartesian manner, that is counterclockwise from 3 O'clock.)  setX 30   8Moves the turtle horizontally to the coordinate x = 30. 7 setY 40   6Moves the turtle vertically to the coordinate y = 40. 5 setXY 30,40   +Moves the turtle to the coordinates 30,40. * incXY 3,4   IIncreases the x coordinate of the turtle by 3 and the y coordinate by 4. H      N New Field 3)`*F cREVGeneral revUniqueID 1005143499075 L % Functions   xcor ( )   #Returns the turtles x coordinate. ycor ( )   #Returns the turtles y coordinate. xyCor ( )   4Returns a list of the turtles x and y coordinates. heading ( )   Returns the turtle's heading. #direction (30,40) or toward(30,40)     qReturns the direction of the point 30,40 from the current location of the turtle. It does not rotate the turtle. distance (30,40)   QReturns the distance from the current location of the turtle to the point 30,40. clickPoint ( )    jReturns the x and y coordinates of the point of the mouse click--useful in importing data into a program. O New Field 4)`j= cREVGeneral revUniqueID 1005143503767 L 8 Miscellaneous * * StartTurtle [st]    Starts the turtle. It cleans the screen, places the turtle at the origin, facing right, and in the drawing mode. It must precede all turtle graphics commands. t t- home  20 then divide s by 3 drawSide s lt 60 drawSide s rt 120 drawSide s lt 60 drawSide s else fd s end if end drawSide 33P cREVGeneral revUniqueID 1014566850363 BounceEqon mouseUp startTurtle sethome -100,-100 bounce send "choose the browse tool" to me in 1 tick end mouseUp on bounce put 5 into vx put 4 into vy put 300 into L drawBox L repeat 500 incXY vx,vy if xcor() > L or xcor() <0 then multiply vx by -1 if ycor() > L or ycor() < 0 then multiply vy by -1 end repeat end bounce on drawBox side repeat 4 forward side left 90 end repeat end drawBox 33PcommandfalseTcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertruerect 10,557,90,577 mnemonic0armFillfalse patterns showNametrue showIconfalsecolors sharedHilitetrueshadowfalse textAligncentermenuMouseButton1id1037altId0 labelWidth0number2 accelKey textStylelockLocfalse showHilitefalselabel autoHilitetruearmfalsestylestandard armBordertruenameBounceicon0toolTiplayer3 accelTextvisibletrue cantSelectfalse borderWidth2hilitefalse menuLines5margins4opaquetrue accelModscommand shadowOffset4defaultfalse menuName hiliteFilltrue showBordertrue textSize hiliteIcon0 disabledfalseautoArmfalse menuModefamily0 textFont menuHistory1 cREVGeneral revUniqueID 1002319671236 H DiagonalsEqon mouseUp poly 25,50 send "choose the browse tool" to me in 1 tick end mouseUp on poly n,L st ct sethome 0,-150 repeat with i = 1 to n put xycor() into vertex[i] fd L lt 360/n end repeat repeat with i = 1 to n repeat with j = i+1 to n lineBetween vertex[i],vertex[j] end repeat end repeat end poly on lineBetween a,b pu setXY b pd setXY a end lineBetween 33Pq cREVGeneral revUniqueID 1014570676994 5Tower of HanoiEq>on mouseUp ct ask "How many disks are there? (The limit is 10.)" if it is empty or it > 10 then exit mouseUP lock screen TOWER it ,"A", "B" ,"C" unlock screen answer "To move " & it && "disks from one peg to another takes " & the number of lines in field "data" &&"moves." --ct send "choose the browse tool" to me in 1 tick end mouseUp ON TOWER N, start, destination, spare IF N = 0 THEN EXIT TOWER TOWER N - 1, start, spare, destination pr "Move " & N & " from "& start & " to "& destination TOWER N - 1, spare, destination, start END TOWER 33Pn cREVGeneral revUniqueID 1014567613629 'Recursive trianglesEqon mouseUp set the cursor to watch st seth 90 sethome 0,-40 triangle 150 sethome 0,0 send "choose the browse tool" to me in 1 tick end mouseUp on triangle L if L> 5 then lt 90 fd L/2 lt 30 triangle L/2 rt 120 + 30 fd L lt 30 triangle L/2 rt 120 + 30 fd L lt 30 triangle L/2 rt 120 + 30 fd L/2 rt 90 end if end triangle 33P cREVGeneral revUniqueID 1014566848360 %Recursive boxesEq on mouseUp st sethome -100,50 box 300 send "choose the browse tool" to me in 1 tick end mouseUp on box L home repeat 4 drawSide L,4 rt 90 end repeat end box on drawSide s,n if n = 1 then fd s else divide s by 4 drawSide s,n-1 lt 90 drawSide s,n-1 rt 90 drawSide s,n-1 rt 90 drawSide s,n-1 lt 90 drawSide s,n-1 end if end drawSide 33P cREVGeneral revUniqueID 1144102375894 Cancer irradiationEq on mouseUp answer "How to kill a tumor without killing the surrounding tissue." st centeredCircle 10 label "Tumor" put 100 into L put 36 into numShots pu repeat with i = 1 to numShots fd L put xyCor() into where[i] bk L left 180/numShots end repeat put the ticks into startTime repeat with i = 1 to numShots setxy where[i] seth direction(0,0) pd centeredCircle 3 fd 2*L pu end repeat send "choose the browse tool" to me in 1 tick end mouseUp 3333QX= cREVGeneral revUniqueID 1144102375897 Turtle chases rabbitEqL on mouseUP st sm -- Start monkey: a second cursor showturtle pu setxy 200,0 seth 90 pd repeat until the mouseclick fd 8 lt 4 put xycor() into tTurtle tellMonkey seth direction(tTurtle) fd 5 endMonkey end repeat hideTurtle send "choose the browse tool" to me in 1 tick end mouseUP 3333P} cREVGeneral revUniqueID 1144102375898  RainbowsEq Ylocal r,tAngle,n,d,dd, alpha, theta on mouseUP put "The red arc of the rainbow is seen at an angle of about 42.5 " into tText put "degrees above the earth-sun line. (Use the utilities button to allow scrolling.)" after tText answer tText st ct --set the vscrollBar of field "data" to true sethome -100,50 put 7 into d put 2 into dd put 100.1 into r put 1.33 into n set the backgroudcolor of templategraphic to "white" centeredCircle r pu setxy r + 100,50 label "Rays incident on the raindrop coming from the setting sun." drawRay d,dd lock screen pu setxy 250, -180 label "Rays reflected back toward the observer." setxy 20,-200 label "42.5 degrees relative to the horizon." unlock screen send "choose the browse tool" to me in 1 tick end mouseUP on drawRay d,dd set the textstyle of line 1 to 2 of field "data" to "bold" pr "Angle of" pr "emerging ray." set the textstyle of line 3 of field "data" to "plain" set the pencolor to "red" repeat if abs(d) >= r then exit repeat startRayAt d refraction n crossDrop reflection crossDrop refraction 1/n exitRay -- Or simply: forward 160 pr 360 - heading() add dd to d end repeat set the pencolor to "black" end drawRay -- The following five word ray-vocabulary (startRayAt, refraction, crossDrop, reflection, exitRay) -- would be provided to the students for his or her use -- in constructing scenarios for rays interacting with transparent, spherical objects, -- for example a raindrop. on startRayAt d pu setXY 40+r ,d seth 180 pd fd 40 + r - sqrt(r*r- d*d) end startRayAt on doErrorMessage beep choose browse tool exit to hypercard end doErrorMessage on refraction n put heading() into tHeading seth direction(0,0) put tHeading - heading() into temp if abs(tHeading - heading()) > 90 then rt 180 put tHeading - heading() into tAngle put (sine(tAngle)/n) into temp if abs(temp) > 1 then doErrorMessage put arcsine(temp) into tAngle put heading() + tAngle into temp seth heading() + tAngle -- fd 40 -- bk 40 end refraction on reflection left 180 put heading() into tHeading seth direction(0,0) left heading() - tHeading end reflection on crossDrop put 2*r*cosine(tAngle)into L put xyCor() into temp fd L --put xycor() into temp end crossDrop on exitRay fd 160 end exitRay {] cREVGeneral revUniqueID 1144102375899  New Graphic 1KE cREVGeneral revUniqueID 1014940839510 New Field 1*B cREVGeneral revUniqueID 1144102375900  Fractals   New Graphic 2K cREVGeneral revUniqueID 10149409517617Rabbits and foxesEqon mouseUp answer "Click in the first quadrant to set inital numbers of rabbits and foxes. Click a second time to stop the evolution of the population." st setHome -200,-100 drawAxes put .04 into a -- birth rate of rabbits put .03 into b -- death rate of foxes put .0004 into c -- death of rabbits due to meeting foxes put .0004 into d -- nourishment of fox population do to "encounters" with rabbits. repeat put clickpoint() into rabbitsAndFoxes put item 1 of rabbitsAndFoxes into rInitial put item 2 of rabbitsAndFoxes into fInitial put rInitial into r put fInitial into f if r < 0 or f < 0 then answer "(Click only in the first quadrant.)" next repeat else exit repeat end if end repeat pu setXY r,f pd repeat with i = 1 to 400 add a*r - c*r*f to r -- Voltera equations add -b*f + d*r*f to f setXY r,f set the loc of button "turtle" to turtlePtToMousePt(xycor()) if the mouseclick then exit repeat end repeat send "choose the browse tool" to me in 1 tick end mouseUp on drawAxes fd 300 Label "Rabbits" pu home pd seth 90 fd 300 Label "Foxes" end drawAxes  cREVGeneral revUniqueID 1014570266781 New Field 1*EB cREVGeneral revUniqueID 1144102375901  Physics  New Field 1*B cREVGeneral revUniqueID 1144102375902  Biology  New Field 1*B cREVGeneral revUniqueID 1144102375903  Geometry   Plot the sine functionEq3on mouseUp startTurtle put 100 into theAmplitude repeat with x = 0 to 360 step 4 setxy x,theAmplitude*sine(x) end repeat lock screen put the script of me into tScript create field "temp" set the loc of field "temp" to 300,200 set the dontwrap of field "temp" to true delete line 7 to 20 of tScript put "Here is the script to draw the sine function. (Click to continue.)" &return &return into field "temp" put tScript after field "temp" set the width of field "temp" to the formattedwidth of field "temp" set the height of field "temp" to the formattedHeight of field "temp" set the textstyle of the last line of field "temp" to bold unlock screen set the cursor to hand wait until the mouseclick delete field "temp" send "choose the browse tool" to me in 1 tick end mouseUp 3333P< cREVGeneral revUniqueID 1144102375904  turtleC@V;   cREVGeneral revUniqueID 1015174119711 turtleGraphic@CF cREVGeneral revUniqueID 10153679186980ScrollBarDragqglobal waitTime on scrollBarDrag put the thumbPosition of me into waitTime put waitTime/2 into waitTime end scrollBarDrag " revscrollbarfalse 020 cREVGeneral revUniqueID 1015369959101  New Field 3*@)% cREVGeneral revUniqueID 1015386421158  Drag on turtle   New Field 4!*@$[V cREVGeneral revUniqueID 1015430529741  Transcript and Turtle Graphics   as tools in problem solving.   *New Graphic 2K^^^ cREVGeneral revUniqueID 1144102375905CInstructuor versionEq3on mouseUp taboo end mouseUp %z cREVGeneral revUniqueID 1015627864257 Dtemp)`!\ cREVGeneral revUniqueID 1015628296329 A  `O" GaaChild)`@s cREVGeneral revUniqueID 1015706925181 A HbbChild)`2s cREVGeneral revUniqueID 1144102802166 A IccChild)`Rs cREVGeneral revUniqueID 1144102802167 A JddChild)`rs cREVGeneral revUniqueID 1144102802168 A KabChild)`s cREVGeneral revUniqueID 1144102802169 A LacChild)`s cREVGeneral revUniqueID 1144102802170 A MadChild)`s cREVGeneral revUniqueID 1144102802171 A NbcChild)`s cREVGeneral revUniqueID 1144102802172 A ObdChild)`s cREVGeneral revUniqueID 1144102802173 A PcdChild)`2s cREVGeneral revUniqueID 1144102802174 A T New Field 17(@| cREVGeneral revUniqueID 1015708410253 aa  U New Field 17(@0| cREVGeneral revUniqueID 1144102802175 bb  V New Field 17(@P| cREVGeneral revUniqueID 1144102802176 cc  W New Field 17(@q| cREVGeneral revUniqueID 1144102802177 dd  X New Field 17(@| cREVGeneral revUniqueID 1144102802178 ab  Y New Field 17(@| cREVGeneral revUniqueID 1144102802179 ac  Z New Field 17(@| cREVGeneral revUniqueID 1144102802180 ad  [ New Field 17(@} cREVGeneral revUniqueID 1144102802181 bc  \ New Field 17(@| cREVGeneral revUniqueID 1144102802182 bd  ] New Field 17(@2| cREVGeneral revUniqueID 1144102802183 cd ^New Graphic 1KFt cREVGeneral revUniqueID 1015708738552_New Graphic 2KF677 cREVGeneral revUniqueID 1015708761269`New Graphic 2KF cREVGeneral revUniqueID 1144102802184aNew Graphic 2KFstt cREVGeneral revUniqueID 1144102802185 b New Field 13(@d cREVGeneral revUniqueID 1144102802186 0  c New Field 13(@)4 cREVGeneral revUniqueID 1144102802187 6.25%  d New Field 13(@: cREVGeneral revUniqueID 1144102802188 12.50%  e New Field 2)`33t  cREVGeneral revUniqueID 1015710043702 A The origin of the incest taboo   9There is a genetic basis for the incest taboo. It arises as a result of the high potential of the progeny to inherit a lethal recessive gene if the parents are closely related. We say that "a" is a lethal, recessive gene if the allele "ax" (where "x" is any other gene) is healthy, but the allele "aa" is fatal. 8  In the example to the left, we consider a father who carries a lethal recessive gene "a" and a mother who does not. At the gene site the father carries "ab" and the mother "cd". They have two children, a boy and a girl. If these two should have an incestuous relationship giving birth to a child, there is a 6.25% that the baby will have two lethal genes at the site (the red graphic bar), that is an allele "aa", and as a result will not survive.   Click on the button "Taboo" and set a value for the sample size n. (It must be 1000 or less. These are very prolific siblings.)The program (in the card script) runs through n matings described above and displays the percentage of the various gene combinations for the eventual child.  fThe incest tabooEq-on mouseUp go to card "taboo" end mouseUp ^ cREVGeneral revUniqueID 1144102375906 jBack to examplesEq0on mouseUP go to card "examples" end mouseUP 3333rZ cREVGeneral revUniqueID 1015717808940 Simple projectile motionEqon mouseUp startTurtle setHome -200,0 put 4 into vx put 5 into vy put .1 into gravity repeat until ycor() < 0 incXY vx,vy subtract gravity from vy end repeat put the script of me into tScript lock screen create field "temp" set the loc of field "temp" to 450,450 set the dontwrap of field "temp" to true delete line 3 of tScript delete line 10 to 27 of tScript put "Here is the repeat loop to draw the trajectory." &return &return into field "temp" put tScript after field "temp" set the width of field "temp" to the formattedwidth of field "temp" set the height of field "temp" to the formattedHeight of field "temp" set the textstyle of the last line of field "temp" to bold set the textstyle of line 8 to 11 of field "temp" to bold set the textAlign of field "temp" to left unlock screen wait until the mouseclick delete field "temp" send "choose the browse tool" to me in 1 tick end mouseUp Click anywhere to continue. commandfalse:cREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertrue mnemonic0rect 10,517,90,537armFillfalse patterns colors showIconfalse showNametrueshadowfalse sharedHilitetrue textAligncentermenuMouseButton1id1040altId0 labelWidth0 accelKeynumber3 textStylelockLocfalsearmfalse autoHilitetruelabel showHilitefalsestylestandard armBordertrueicon0namePlanetary orbittoolTip accelTextlayer4 borderWidth2 cantSelectfalsevisibletruehilitefalse menuLines5margins4 accelModscommandopaquetruedefaultfalse shadowOffset4 hiliteFilltrue menuName showBordertrue disabledfalse hiliteIcon0 textSizeautoArmfalsefamily0 menuMode textFont menuHistory1 cREVGeneral scriptChecksumzXvk|-:am handlerListmouseUp breakPointsscriptSelection char 28 to 27 bookmarks revUniqueID 1144102375907 prevHandlermouseUp tempScriptscriptw

on mouseUp

startTurtle

setHome -200,0

put 4 into vx

put 5 into vy

put .1 into gravity

repeat until ycor() < 0

incXY vx,vy

subtract gravity from vy

end repeat

put the script of me into tScript

lock screen

create field "temp"

set the loc of field "temp" to 450,450

set the dontwrap of field "temp" to true

delete line 3 of tScript

delete line 10 to 27 of tScript

put "Here is the repeat loop to draw the trajectory." &return &return into field "temp"

put tScript after field "temp"

set the width of field "temp" to the formattedwidth of field "temp"

set the height of field "temp" to the formattedHeight of field "temp"

set the textstyle of the last line of field "temp" to bold

set the textstyle of line 8 to 11 of field "temp" to bold

set the textAlign of field "temp" to left

unlock screen

wait until the mouseclick

delete field "temp"

send "choose the browse tool" to me in 1 tick

end mouseUp

Click anywhere to continue.

 New Field 1*@1F cREVGeneral revUniqueID 1144102802189 Percentage of offspring of  a brother and sister with  each possible allele. New Graphic 2K& cREVGeneral revUniqueID 1144102375908  New Field 1)`yM cREVGeneral revUniqueID 1018104525554    , "In the beginning was the word." + xThe genesis of the computer user interface was the "word," the command line. It was the computer-friendly thing to do. But as computers became more powerful, the graphical user interface (GUI) became the norm. It was the user-friendly thing to do. K K6  The fundamental advantage of a GUI is that sight is very efficient. Vision allows us to take in a great deal of information at a glance, to process this information in a most efficient manner, winnowing out the unimportant, and focusing on the most relevant elements. In contemporary jargon we would say that sight functions within a very broad bandwidth. This is surely a vestige of our genetic evolution. It would take a paragraph of text to alert a hunter-gatherer to the fact that a lion was approaching out of the bush with a specific direction, with a specific speed, and a particularly determined look in his eye; while there is no need to be concerned at the moment with that quiet bolder or tree in the background, the hunter-gatherer better make plans to deal with the lions approach. Presumably the earlier ancestors of man, the MS DOS creatures, quickly gave way to GUI man, an Horatio algae story. S S>  Now what I propose is not a GUI computer language, but a computer language that allows the student to present his or her results in a graphic manner, a presentation that allows for more immediate perception and fuller comprehension of the results of his or her programming. L L In most languages graphic results are accomplished with something like a drag command: Select a graphic tool and drag from x1, y1 to x2, y2. Now I ask you, is that any way for a visually oriented species to communicate with a screen object? What the combination of Transcript and Turtle Graphics (TG) offers is still command-line programming, but with a more natural underlying terminology for the resulting screen graphics. For example, to draw a pentagon: on pentagon L * startTurtle Initiate the drawing tools  repeat 5 times forward L  left 360/5 end repeat end pentagon [Now what could be more natural? Draw one side by moving forwards a specified distance, turning through one fifth of a complete circle and then repeating this process four more times. These commands, forward and left, are TG tools. It is easy to see how one might generalize "pentagon" to construct a polygon of arbitrary size and number of sides: on polygon L,N startTurtle  repeat N times forward L  left 360/N end repeat end polygon nOf course there are times where coordinate geometry is more efficient. For example to plot the sine function: on plotSineFunction  startTurtle  put 100 into A  repeat with x = 0 to 360  setXY x, A*sine(x) end repeat end plotSineFunction Here the TG command is setXY, a tool that has its roots deeply embedded in Cartesian geometry. (Superficially this may appear to be no different from drag command. However, SetXY has a built-in memory of the current turtle statethe turtle coordinates and headingand moves the turtle from that position to the specified new position. There is no need to reference the existing position, that is, drag from the existing position to the new position.)  Notice that all of this programming is driven by a command-line. When we say that Transcript/TG has advantages akin to those of the popular GUIs we mean that the output of these programs may represent the solution in graphical format, perhaps a function plot or a drawing of an orbit or trajectory, or a tracing of light rays. What TG does for the user is to facilitate the programmatic output in graphical from. N NV   What we propose is a pre-college course (elementary or high school) in computer programming as a tool for solving problems in science and mathematics, the kind of programming for which the computer was initially conceived and developed. In the beginning it might be offered only to dedicated students, perhaps GATE (gifted and talented) students. But eventually we believe that this could become a mainstream component of the curriculum for students interested in science and mathematics. p There is, of course, another sort of programming course, one that is geared toward the computer programmer. But this would serve a smaller class of students, those interested in pursuing a very specialized profession in programming. On the other hand, a problem-solving course would serve a broad class of students pursuing a course of study in any of the sciences. M M" ^An outline for this course may be gathered from the table of contents below. There is an emphasis on physics, not surprisingly since that is what I do. But there are also applications to mathematics and biology. Hopefully you will help me to expand the scope by contributing examples from your fields of expertise. Consider this an open source text.  Some of these topics are illustrated in the "Example" card and may not be clear without a little background. The rainbow illustraction, for example, is a bit complex; the button illustrates the paths of only one particular frequency. Most of these examples are intended only as illustrative of what the student might accomplish and not as canned software to be shown to the student by the instructor. If there is interest, I would post the text or send it to individuals. But beware; it has not been class tested, or even proof read. Table of contents  Chapter 1 Turtle Graphics   Loading Revolution  Turtle Graphics  A Few Simple Commands P 1. Commands: forward, back, right, left, pu, pd, home, clean, and st. z 2. Command: setxy (short for: Set X and Y coordinates) and incxy (short for: INCrement the X and Y coordinates). 3 3. Command: seth (short for SET Heading). Chapter 2 Functions   Introduction 3 1. Functions: xcor(), ycor(), and xycor().  2. Function: HEADING() 8 3. Functions: direction(?,?) and distance(?,?). #Chapter 3 User Defined Procedures "  Introduction Iteration 5 Commands: PUT, ADD, SUBTRACT, MULTIPLY, and DIVIDE  Conditional: IF..THEN..ELSE  Lists  Variable Scope Parameters  The Geometry of the Circle  Areas "Chapter 4 User Defined Functions !  Introduction Examples Chapter 5 Turtle Physics   Introduction Projectiles  Projectile Motion II #Chapter 6 The Harmonic Oscillator "  Introduction ) The One Dimensional Harmonic Oscillator ) The Two Dimensional Harmonic Oscillator %Chapter 7 The Monkey and the Hunter $ % Einsteins Principle of Equivalence  The Monkey and the Hunter Chapter 8 Planetary Motion  ' Newtons law of universal gravitation  The turtle goes into orbit ) Keplers three laws of planetary motion Chapter 9 Music of the Spheres  Scaling Chapter 10 Voyager II   Introduction  Constucting the orbit 'Chapter 11 Rockets, Jets, and Momentum &  Introduction Rockets  Jets In preparation: Chapter 12 The Big Bang  Chapter 13 Radioactive Decay  *Chapter 14 Bridges, Catenaries & Arches ) Chapter 15 Fishes and Optics  Chapter 16 The Rainbow   `\K  New Field 2+h33 V cREVGeneral revUniqueID 1018104545036  Problem solving $with Transcript and Turtle Graphics James Hurley  Emeritus Professor of Physics  Department of Physics  University of California  Davis, California 95616  jhurley@infostations.com  Read meEq'On mouseUp go to card 4 end mouseUp 33̙Gu! cREVGeneral revUniqueID 1018105258997  Back to examplesEq0on mouseUP go to card "examples" end mouseUP 33e&! cREVGeneral revUniqueID 1014640571524 Bdata(on mouseup put the number of lines of field 1 into n repeat with i = 1 to n if i mod 2 = 0 then set the textstyle of line i of field 1 to bold end repeat end mouseup @cREVTempMaster5 tabStops traversalOntrueinksrcCopy firstIndent0 dontSearchfalsetoggleHilitesfalsethreeDtruescrollbarWidth20 textHeightrect 0,0,386,378multipleHilitesfalse patterns colors shadowfalsehScroll0 textAlignleft vScrollbarfalse hScrollbarfalseid1003altId0autoTabfalsenumber1 textStylehGridfalselockLocfalse dontWrapfalse autoHilitetruestyle rectangle showLinesfalse sharedTextfalsenoncontiguousHilitesfalse lockTexttruename New Field 1 wideMarginsfalsetoolTipvGridfalse listBehaviorfalselayer1visiblefalse cantSelectfalse borderWidth2margins8 htmlText1

2

0

1

2

0

1

2

0

22.511497

63.638124

43.074811

142.230243

202.511497

172.37087

243.638124

322.230243

282.934184

30.906403

81.647206

56.276804

123.85101

210.906403

167.378707

261.647206

303.85101

282.749108

27.962232

83.246426

55.604329

133.5524

207.962232

170.757316

263.246426

313.5524

288.399413

threeDHilitefalseopaquetrue shadowOffset4 showBordertrue textSize disabledfalsefixedLineHeighttrue textFontvScroll0 hilitedLines cREVGeneral revUniqueID 1002306912759 A $turtleGraphic@KFk  cREVGeneral revUniqueID 1018240756678 - New Field 3)A(( cREVGeneral revUniqueID 1018244302230 A a,b . New Field 3)'( cREVGeneral revUniqueID 1144102802190 A c,d / New Field 3)+c(D cREVGeneral revUniqueID 1144102802191 A a,c a,d b,c b,d 0 New Field 3)e(F cREVGeneral revUniqueID 1144102802192 A a,c a,d b,c b,d 1 New Field 3U)G cREVGeneral revUniqueID 1144102802193 A a,a b,b c,c d,d 2 New Field 3z)e cREVGeneral revUniqueID 1144102802194 A a,b a,c a,d b,c b,c c,d3New Graphic 3KD3333K9 h cREVGeneral revUniqueID 10182445561404New Graphic 3KD33339 h cREVGeneral revUniqueID 11441028021955New Graphic 3KD3333K} h cREVGeneral revUniqueID 11441028021967New Graphic 3KD3333n h cREVGeneral revUniqueID 1144102802197 8 New Field 3);/ cREVGeneral revUniqueID 1144102802198 A Father  9 New Field 3)3 cREVGeneral revUniqueID 1144102802199 A Mother  : New Field 3)w/ cREVGeneral revUniqueID 1144102802200 A Son  ; New Field 3)x: cREVGeneral revUniqueID 1144102802201 A Daughter  < New Field 3)0( cREVGeneral revUniqueID 1144102802202 A Child > D  !A@  @@  @@  @B$$B@  @@  @@  @A! @@    @@@@    @@@@    @@@@    @@DD((//////////////////?//////?/?///////////?/?////////////?///// ?!?A//@/ / /@///@? /?/ /@///@/ ?// /@///B/$///$/B///@/ //? /@///@/ /// /@///@/ /// /@///A/!// @?@? ? ??/// / @/@/////@/@/ / //// / /@/@/////@/@ / /// / /@/@///7/@/@/ / /// / /@/@///////D/D/(/(////////////////7////////?//////////?//////////////////////?/////////9/////////////////?????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7????/????????/????????7?????????????7? cREVGeneral revUniqueID 1144102802203KVoyagerEqlocal massJupiter,dt,vFrame,vPlanet,tText on mouseUp answer "Voyager gets a slingshop boost around Jupiter on its way to Uranus. (You may want to increase the drag--see slider above--if it goes by too quickly.)" voyager -120 ,-120, 10, 18, 120, -8 answer tText hide graphic "planet" choose the browse tool end mouseUp on voyager xSatellite,ySatellite,vSatellite,angleSatellite,xPlanet,vPlanet ct -- Clear the text. set the numberFormat to "0.0" put "The initial speed of satellite was " & vSatellite into tText st --Initiate turtle who will become the satellite put 10000 into massJupiter --Convenient mass chosen for Jupiter put .05 into dt--Time interval between steps put 300 into xPlanet put 0 into yPlanet put -6 into vPlanet put 0 into vFrame put vSatellite* cosine(angleSatellite) into vxSatellite put vSatellite* sine(angleSatellite) into vySatellite pu --Pick the satellite pen up. setxy xSatellite,ySatellite pd--Put the satellite pen down show graphic "planet" repeat until the mouseclick--Begin steping through the motion -- relativeOrAbsolute setxy xSatellite,ySatellite dot -- Place a dot at the position of Voyager. set the loc of graphic "planet" to turtlePtToMousePt(xPlanet,0) repeat 10 times --Take 10 calculational steps but display the position only once. Saves time. add (vxSatellite - vFrame)*dt to xSatellite add vySatellite*dt to ySatellite add (vPlanet-vFrame)*dt to xPlanet add dt*accx(xPlanet - xSatellite,yPlanet-ySatellite) to vxSatellite add dt*accy(xPlanet - xSatellite,yPlanet-ySatellite) to vySatellite end repeat if ycor() > 310 then exit repeat end repeat put return & "The final speed of satellite is " & sqrt((vxSatellite)^2+vySatellite^2)after tText send "choose the browse tool" to me in 1 tick end voyager function accx x,y put MassJupiter*x/(x^2+y^2)^1.5 into accx if abs(accx*dt) > 10 then soundAlarm return accx end accx function accy x,y put MassJupiter*y/(x^2+y^2)^1.5 into accy if abs(accy*dt) > 10 then soundAlarm return accy end accy on dot pd fd 2 bk 2 pu end dot on soundAlarm beep 2 answer "Crash" -- show field "LaunchPad" choose the browse tool exit to top end soundAlarm Ls cREVGeneral revUniqueID 1014571317144  Background<T cREVGeneral revUniqueID 1039628679678 Hdata(@ 4LSelection Descriptionfalsetabs 40,70,130,290(F cREVGeneral revUniqueID 1018673079399  G FJ FG F. F! E EJ =H = 9 8 5 4D 3 3 2 2 0.00 10313.24 2 12.18, 95.94 12.18, 95.94 13.02, 125.29 14.23, 178.87 12.33, 154.91 14.23, 178.87 .z R  A L Lock or unlockEp2on mouseUp --ct get the script of this stack -- put field "data" into it if "--set the lockscreen to true" is in it then replace "--set the lockscreen to true" with "set the lockscreen to true" in it Replace "--set the lockscreen to false" with "set the lockscreen to false" in it else replace "set the lockscreen to true" with "--set the lockscreen to true" in it Replace "set the lockscreen to false" with "--set the lockscreen to false" in it end if --put it into field "data" set the script of this stack to it end mouseUp Y*# cREVGeneral revUniqueID 1039736929672 Student versionEqRon mouseUp ct -- Clear text field put 0 into numberOfDeaths put "a,b" into father put "c,d" into mother ask "How big is the sample? (<50,000)" put it into thisManyChildren pr "Please wait." -- pr = print to text field repeat thisManyChildren times put item random(2) of father into item 1 of son put item random(2) of mother into item 2 of son put item random(2) of father into item 1 of daughter put item random(2) of mother into item 2 of daughter put item random(2) of son into item 1 of child put item random(2) of daughter into item 2 of child if child is "a,a" then add 1 to numberOfDeaths end repeat ct set the numberformat to "#.##" pr "Probability that the child will die = " & numberOfDeaths/thisManyChildren*100 &"%" pr "in this sample of "& commaFormat(thisManyChildren) end mouseUp H%Selection DescriptionfalseC cREVGeneral revUniqueID 1041092371418 ( Utilities uglobal noDraw on menuPick temp switch temp case "Show-Hide Turtle" if noDraw then showTurtle else hideTurtle break case "Show turtle's vocabulary" go to card "help" break case "TG handlers" edit the script of this stack break case "Toggle scrolling" if the vscrollBar of field "data" is true then set the vscrollBar of field "data" to false else set the vscrollBar of field "data" to true break end switch end menuPick eGShow-Hide Turtle Show turtle's vocabulary TG handlers Toggle scrolling cREVGeneral revUniqueID 1041116958655 NStudent ver. 2EpQon mouseUp ct -- Clear text field put 0 into numberOfDeaths put "1,2" into father put "3,4" into mother ask "How big is the sample? (<50,000)" put it into thisManyChildren pr "Please wait." repeat thisManyChildren times put item random(2) of father into item 1 of son put item random(2) of mother into item 2 of son put item random(2) of father into item 1 of daughter put item random(2) of mother into item 2 of daughter put item random(2) of son into char 1 of child put item random(2) of daughter into char 2 of child add 1 to item value(child) of results end repeat set the numberformat to "#.##" ct repeat with i = 1 to the number of items in results if item i of results is not empty then pr i& comma&& item i of results/thisManyChildren*100 end if end repeat end mouseUp 1df cREVGeneral revUniqueID 1041211210479 rAngle bisectorsEqon mouseUp answer "Click at any three points to create a triangle." st --start the turtle pu --Choose the three verticies of the triangle repeat with i = 0 to 2 put clickPoint() into a[i] setxy a[i] pd end repeat --Construct the three angle bisectors repeat with i = 0 to 2 setxy a[i] pd seth bisector(a[(i+1) mod 3], a[(i+2) mod 3]) fd 400 put xycor() into b[i] bk 400 label "Bisected angle" end repeat --Find the point of interesection of the angle bisectors put intersection(a[0],b[0],a[1],b[1]) into centeredPoint setxy centeredPoint label "Center of inscribed circle" --Get distance between intersection (centeredPoint) and any of the three lines put perpDist(centeredPoint,a[0],a[1]) into radius --Draw circle of this radius at the point of intersection centeredCircle (radius) send "choose the browse tool" to me in 1 tick end mouseUP function perpProjPt p0,p1,p2 put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of p0 into x0 put item 2 of p0 into y0 put (y2-y1)/(x2-x1) into m put m/sqrt(1+m*m) into s --sine put 1/sqrt(1+m*m) into c -- cosine put x1+(y0-y1)*s*c+(x0-x1)*c*c into x put y1 + (y0-y1)*s*s + (x0-x1) * s * c into y return round(x),round(y) end perpProjPt function bisector b,c return avg(direction(b),direction(c)) end bisector IcommandfalseBcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertrue mnemonic0rect 10,577,90,597armFillfalse patterns colors showIconfalse showNametrueshadowfalse sharedHilitetrue textAligncentermenuMouseButton1id1120altId0 labelWidth0 accelKeynumber4 textStylelockLocfalsearmfalse autoHilitetruelabel showHilitefalsestylestandard armBordertrueicon0nameAngle bisectorstoolTip accelTextlayer5 borderWidth2 cantSelectfalsevisibletruehilitefalse menuLines5margins4 accelModscommandopaquetruedefaultfalse shadowOffset4 hiliteFilltrue menuName showBordertrue disabledfalse hiliteIcon0 textSizeautoArmfalsefamily0 menuMode textFont menuHistory1 cREVGeneral revUniqueID 1004884008072  Student vs.3Epon mouseUp ct -- Clear text field put 0 into numberOfDeaths put "1,2" into father put "3,4" into mother ask "How big is the sample? (<50,000)" put it into thisManyChildren pr "Please wait." repeat thisManyChildren times put item random(2) of father into item 1 of son put item random(2) of mother into item 2 of son put item random(2) of father into item 1 of daughter put item random(2) of mother into item 2 of daughter put item random(2) of son into char 1 of child put item random(2) of daughter into char 2 of child add 1 to item value(child) of results end repeat set the numberformat to "#.##" ct put "a,b,c,d" into genes repeat with i = 1 to the number of items in results if item i of results is not empty then pr item char 1 of i of genes & item char 2 of i of genes & comma&& \ item i of results/thisManyChildren*100 end if end repeat end mouseUp 1d! cREVGeneral revUniqueID 1042844301002 >Display!`J cREVGeneral revUniqueID 1042916447162  Send a planet around the sun.  New Field 1(Red@0S$ cREVGeneral revUniqueID 1043103674494 R  Atoms Radioactive decayEq3on mouseUp go to card "radioactive" end mouseUp 3333P&L cREVGeneral revUniqueID 1144102375909 BBack to examplesEq0on mouseUP go to card "examples" end mouseUP 33k cREVGeneral revUniqueID 1014640571524 HRadio active decayEq /local numAtoms,places,chance,radState,tTime,oneSec,monkeyScale,numRadiated local xxScale, yyScale global x,y,x0,y0,penDown,tLock on mouseUp cleanup ask "How many atoms (<50)?" with "40" if it is empty then exit mouseUp if it > 50 then exit mouseUp put it into numAtoms put 0 into numRadiated ask "The odds of an atom decaying in one second are 1 in how many...?" with "12" if it is empty then exit mouseUp put it into chance put 13 into dx --Distance between boxes representing atoms put -300 into dxHome put -200 into dyHome startTurtle hideturtle setHome dxHome,dyHome put x0 into xAtomsLocs put y0 + 30 into yAtomsLocs --Set atoms style, i.e. little boxes; --Black active, White stable set the style of templategraphic to rectangle set the width of templategraphic to 10 set the height of templategraphic to 10 set the backgroundcolor of templategraphic to "black" --Place boxes representing radioactive atoms lock screen repeat with i = 1 to numAtoms create graphic (atom&i) set the loc of graphic (atom&i) to xAtomsLocs+(i-1)*dx,yAtomsLocs end repeat unlock screen reset the templategraphic drawCoordinateAxes pu put 0 into tTime put 1 into oneSec if tLock is true then set the lockscreen to true radioactive --Experiment plot -- Theory unlock screen -- Label graphs -- pu -- setxy 350,250 -- label "xxxx..Simulated experiment" --setxy 350,230 -- label "______ Theory" send "choose the browse tool" to me in 1 tick end mouseUp on radioactive set the cursor to watch put 10 into yyScale put 10 into xxScale --Do experiment show field "experiment" if tLock is true then set the lockscreen to true repeat until numRadiated = numAtoms if item 1 of turtlePtToMousePt(xyCor()) > right of this card then exit repeat setxy tTime*xxScale,(numAtoms - numRadiated)*yyScale add 1 to tTime label "x" cycleAtoms end repeat end radioactive on plot choose pencil tool put 0 into tTime setxy tTime*xxScale,numAtoms*yyScale pd show field "theory" repeat until ycor() < 1 setxy xxScale*tTime, yyScale*numAtoms subtract numAtoms/chance from numAtoms add oneSec to tTime end repeat end plot on cycleAtoms repeat with i = 1 to numAtoms if the backgroundcolor of graphic (atom&i) is black then if random(chance) = 1 then set the backgroundcolor of graphic (atom&i) to white add 1 to numRadiated end if end if end repeat end cycleAtoms on drawCoordinateAxes pd fd 700 label "Time" bk 700 seth 90 fd 480 label "Number" end drawCoordinateAxes on cleanup lock screen clean hide field "experiment" hide field "theory" repeat until the number of graphics is 0 delete graphic 1 end repeat unlock screen end cleanup 33{h cREVGeneral revUniqueID 1043004392097 !fNew Graphic 3KD3333{ h cREVGeneral revUniqueID 1144102802204 $) Experiment(@m cREVGeneral revUniqueID 1043248514370 R Simulated experiment...xxxx  $*Theory(@ cREVGeneral revUniqueID 1144102804295 R Theory ________ (; Lock screen?Eqglobal tLock on mouseUp put the short name of me into tName if tName is "Lock screen?" then set the name of me to "Unlock screen?" put true into tLock else set the name of me to "Lock screen?" put false into tLock end if end mouseUp BlackJ[ cREVGeneral revUniqueID 1043250721289 .{Poor man's 3-D plotEqlocal results,xAngle on mouseUp put empty into results st sethome -150,-110 hideturtle put "10,20,30,40,50" into thisXplane repeat with i = 1 to the number of items in thisXplane cleanUp put empty into results pu home pd drawAxes put 0 into y put 6 into dy put item i of thisXplane into x repeat 50 setxyz x,y, z(x,y) add dy to y end repeat PlotResults results end repeat send "choose the browse tool" to me in 1 tick end mouseUp function z x,y return x*(y^2)/400* exp(-y/80) end z on setxyz x,y,z pu home seth xAngle fd x seth 0 fd y seth 90 fd z put xycor() & return after results pd bk z end setxyz on PlotResults results pu setxy line 1 of results pd repeat with i = 1 to the number of lines in results setxy line i of results end repeat end plotResults on drawAxes put 300 into axisLength put 270- 45 into xAngle fd axisLength label "y" bk axisLength seth 90 fd axisLength label "z" bk axisLength seth xAngle fd axisLength/2 label "x" bk axisLength/2 end drawAxes on cleanUp lock screen repeat while the number of images > 0 delete image 1 end repeat put 1 into i unlock screen end cleanUp K[ cREVGeneral revUniqueID 1043253541056 .|turtleGraphic@CF%* cREVGeneral revUniqueID 1043253568440 . New Field 1(;X4 cREVGeneral revUniqueID 1043255999276 .z function z x,y  ! return x*(y^2)* exp(-y/80)/400  end z  /Back to examplesEq0on mouseUP go to card "examples" end mouseUP 33K>X cREVGeneral revUniqueID 1014640571524 / 3-D plottingEq,on mouseUp go to card "plot" end mouseUp 3333P=X cREVGeneral revUniqueID 1144102375910 2Velocity & capacityEpon mouseUp --ct put field "n" into n put field "D" /12/2 into R put 0 into po put field "P" into p put field "L" into L put field "HO" into ho put field "H" into h put ho + po - h -p into theHead put 1.486/.013*(R^(2/3)) * sqrt(theHead/L) into V put 1.486/.013*pi*R^(8/3) * sqrt(theHead/L) into Q set the numberformat to "0.00" pr V & comma&& Q put V into field "velocity" set the numberformat to "0." put round(Q) into field "capacity" end mouseUp >xg cREVGeneral revUniqueID 1045325208806 2n)pAon returninfield send "mouseUP" to button 1 end returninfield m!S cREVGeneral revUniqueID 1045325497554 2 .013 2D)pAon returninfield send "mouseUP" to button 1 end returninfield mBS cREVGeneral revUniqueID 1144102806317 2 48 2po)pAon returninfield send "mouseUP" to button 1 end returninfield mbS cREVGeneral revUniqueID 1144102806318 2 0 2p)pAon returninfield send "mouseUP" to button 1 end returninfield mS cREVGeneral revUniqueID 1144102806319 2 0 2L)pAon returninfield send "mouseUP" to button 1 end returninfield mS cREVGeneral revUniqueID 1144102806320 2 65000 2ho)pAon returninfield send "mouseUP" to button 1 end returninfield mS cREVGeneral revUniqueID 1144102806321 2 400 2h)pAon returninfield send "mouseUP" to button 1 end returninfield mS cREVGeneral revUniqueID 1144102806322 2 0 2 New Field 2) ? &Selection Descriptionfalse cREVGeneral revUniqueID 1045325558867 2 n 2 New Field 2) ?C&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806323 2 D 2 New Field 2) ?c&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806324 2 po 2 New Field 2) ?&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806325 2 p 2 New Field 2) ?&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806326 2 L 2 New Field 2) ?&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806327 2 ho 2h)0Aon returninfield send "mouseUP" to button 1 end returninfield ?&Selection Descriptionfalse cREVGeneral revUniqueID 1144102806328 2 h 2)@k cREVGeneral revUniqueID 1045326768625 2 Velocity (ft/sec)  2)@i cREVGeneral revUniqueID 1144102806329 2 Capacity (cfs)  2 Velocity)`Z cREVGeneral revUniqueID 1045326876982 2 14.23 2 Capacity)`Z cREVGeneral revUniqueID 1144102806330 2 179 2+@Y` cREVGeneral revUniqueID 1144102806331 2 )Manning's equation for velocity/capacity ( 2Calculate areasEp3local area on mouseUp put 0 into area ct st repeat 360 times fdWithArea 1 right 1 end repeat repeat 360 times fdWithArea 1 left 1 end repeat pr area put 360/2/pi into r pr pi*r^2 choose the browse tool end mouseUp on fdWithArea temp put xcor() into xOld put yCor() into yOld put xyCor() into ptOld fd temp add dArea(ptOld, xyCor()) to area end fdWithArea function dArea oldPt,newPt put item 1 of oldPt into xOld put item 2 of oldPt into yOld put item 1 of newPt into xNew put item 2 of newPt into yNew return -(xNew-xOld)*(yNew+yOld)/2 end dArea mouseUp put 0 into area st sethome 0,0 put xyCor() into pOld repeat fd 100 lt 90 put xyCor() into pNew add AddToArea (pOld,pNew) to area put pNew into pOld end repeat pr area choose the browse tool end mouseUp function thisToArea pNew,pOld put item 1 of pNew into xNew put item 2 of pNew into yNew put item 1 of pOld into xOld put item 2 of pOld into yOld return -(xNew - xOld)*(yNew + yOld)/2 end thisToArea qfjc cREVGeneral revUniqueID 1048028007392 2turtleGraphic@KF&3 cREVGeneral revUniqueID 10480280595832Fire projectileEp local theGround on mouseUp ct set the vx of graphic 2 to 10 set the vy of graphic 2 to 10 put item 2 of the loc of graphic 2 into theGround moveProjectile end mouseUP on moveProjectile repeat until outOfBounds() put the loc of graphic 2 into tLoc add the vx of graphic 2 to item 1 of tLoc subtract the vy of graphic 2 from item 2 of tLoc set the loc of graphic 2 to tLoc put the points of graphic 1 into tPts1 put the points of graphic 2 into tPts2 repeat with i = 1 to 4 put line i of tPts1 & comma & line i + 1 of tPts1 into tLine1[i] put line i of tPts2 & comma & line i + 1 of tPts2 into tLine2[i] end repeat repeat with i = 1 to 3 repeat with j = 1 to 3 if theyCross(tLine1[i],tLine2[j]) then set the vy of graphic 2 to -1* the vy of graphic 2 put true into crossed exit repeat end if end repeat if crossed then exit repeat end repeat end repeat end moveProjectile function theyCross line1,line2 put intersection(line1,line2) into p put item 1 of line1 & comma& item 2 of line1 into a put item 3 of line1 & comma& item 4 of line1 into b put item 1 of line2 & comma& item 2 of line2 into c put item 3 of line2 & comma& item 4 of line2 into e put distance(a,b) into ab put distance(a,p) into ap put distance(b,p) into bp put distance(c,e) into ce put distance(c,p) into cp put distance(e,p) into ep if ap item 3 of the rect of this card return true break case theY < 0 or theY > theGround return true break end switch return false end outOfBounds <hG cREVGeneral revUniqueID 1048164787265 2 ProjectileKR mlocal tStop,theFirstTime,tPts1,tLine1,myName,stopBeep,beeped on mouseDown ct put the short name of me into myName put the points of graphic 1 into tPts1 repeat with i = 1 to 4 put line i of tPts1 & comma & line i + 1 of tPts1 into tLine1[i] end repeat put item 2 of the loc of graphic 2 into tStop put false into beeped end mouseDown on mouseMove x,y if myName is not empty then set the loc of me to x,y put the points of me into tPts2 repeat with i = 1 to 4 put line i of tPts2 & comma & line i + 1 of tPts2 into tLine2[i] end repeat put false into atLeastOneCrossing repeat with i = 1 to 3 repeat with j = 1 to 3 if theyCross(tLine1[i],tLine2[j]) then put true into atLeastOneCrossing if beeped is false then beep put true into beeped end if exit repeat end if end repeat if beeded then exit repeat end repeat if atLeastOneCrossing is false then put false into beeped end if end mouseMove on mouseUp put empty into myName end mouseUp function theyCross line1,line2 put item 1 of line1 & comma& item 2 of line1 into a put item 3 of line1 & comma& item 4 of line1 into b put item 1 of line2 & comma& item 2 of line2 into c put item 3 of line2 & comma& item 4 of line2 into e put intersection(line1,line2) into p put distance(a,b) into ab put distance(a,p) into ap put distance(b,p) into bp put distance(c,e) into ce put distance(c,p) into cp put distance(e,p) into ep if ap200 or ycor() < -y0 --Continue until the bullet passes the monkeys fall line. incxy vBulletx,vBullety --Move the bullet. set the loc of button "bullet" to turtlePtToMousePt(xcor() + dx , ycor()) add accGravity to vBullety --Add the bullets acceleration due to gravity. tellMonkey --Start talking to the monkey. incXY 0,vMonkey --Move the monkey. set the loc of button "monkey" to turtlePtToMousePt(xcor() + dx+6 , ycor()) add accGravity to vMonkey --Add the monkeys acceleration due to gravity. endMonkey --Stop talking to the monkey. end repeat --Continue the cycle. set the playloudness to 100 play audioclip "that.hurts.au" wait 3 seconds --if playstopped then set the playloudness to 50 -- end if end monkeyHunter j cREVGeneral revUniqueID 1049932115274 3turtleGraphic@KF cREVGeneral revUniqueID 10499325603763Hunter`@--local myName,tBase -- --on mouseMove x,y -- if myName is not empty then -- put tBase into tPoints -- put x,y into line 2 of tPoints -- set the points of graphic "velocity" to tPoints -- put sqrt((x-item 1 of tBase)^2 + (y - item 2 of tBase)^2) into tVelocity -- put round(tVelocity) into field "velocity" -- put 180/pi*atan2((item 2 of tBase - y),(x-item 1 of tBase)) into tAngle -- if tAngle<0 then add 360 to tAngle -- put round( tAngle ) into field "angle" -- end if --end mouseMove -- --on mouseDown -- put the loc of me into tBase -- if there is not a graphic "velocity" then -- set the style of the templategraphic to "line" -- create graphic "velocity" -- set the endArrow of graphic "velocity" to true -- set the arrowsize of graphic "velocity" to 5 -- end if -- put the name of me into myName --end mouseDown -- --on mouseUp -- put empty into myName --end mouseUp -- --on mouseLeave -- put empty into myName --end mouseLeave G cREVGeneral revUniqueID 1049932812466 33vectorKF{# Selection Descriptionfalse cREVGeneral revUniqueID 10499334986133 velocity@KVlocal myName,tBase on mouseMove x,y if myName is not empty then put tBase into tPoints put x,y into line 2 of tPoints set the points of graphic "velocity" to tPoints put sqrt((x-item 1 of tBase)^2 + (y - item 2 of tBase)^2) into tVelocity put round(tVelocity) into field "velocity" put 180/pi*atan2((item 2 of tBase - y),(x-item 1 of tBase)) into tAngle if tAngle<0 then add 360 to tAngle put round( tAngle ) into field "angle" end if end mouseMove on mouseDown put the loc of button "hunter" into tBase if there is not a graphic "velocity" then set the style of the templategraphic to "line" create graphic "velocity" set the endArrow of graphic "velocity" to true set the arrowsize of graphic "velocity" to 5 end if put the name of me into myName end mouseDown on mouseUp put empty into myName end mouseUp on mouseLeave put empty into myName end mouseLeave Selection Descriptionfalse&Q cREVGeneral revUniqueID 1049933613305 3Angle)`);CSelection Descriptionfalse cREVGeneral revUniqueID 1049935271132 3 43 3 New Field 1h@1\.Selection Descriptionfalse cREVGeneral revUniqueID 1144102810269 3 Angle 3 New Field 1(@+>Selection Descriptionfalse cREVGeneral revUniqueID 1144102810270 3 Velocity 3 velocity)`%yC cREVGeneral revUniqueID 1144102810271 3 1633Bullet`D@@ cREVGeneral revUniqueID 1049936447139 33Monkey`D@K cREVGeneral revUniqueID 1144102810272 3 3 New Field 1(@y^Selection Descriptionfalse cREVGeneral revUniqueID 1144102810273 3 Tree limb 4E New Button 1Epon mouseUP ct put 10 into yScale put 400 into xScale -- put 100 into N put (10,100,200,1000)into tList put 10,100,500,1000 into tList st repeat with j = 1 to the number of items in tList put item j of tList into N put -N/2 into m setxy xScale*m/N,ySCALE* sqrt(2*N/pi)*exp(-2*m*m/N) seth 90 fd 100 bk 100 repeat with m = -N/2 to N/2---60 to 60 setxy xScale*m/N,ySCALE* sqrt(2*N/pi)*exp(-2*m*m/N) -- pr ySCALE* sqrt(2*N/pi)*exp(-2*m*m/N) end repeat end repeat choose the browse tool end mouseUP on mouseUp put 1000 into yScale put 200 into N st sethome 0,0 pr fact(3) repeat with m = -50 to 50 setxy 50*10/N*m,yScale* fact(N)/(2^N*fact(N/2+m)*fact(N/2-m)) end repeat choose the browse tool end mouseUp --function fact p -- put 1 into results -- put 1 into n -- repeat p times -- multiply results by n -- add 1 to n -- end repeat --end fact Hde cREVGeneral revUniqueID 1050425157358 4FturtleGraphic@KF{#  cREVGeneral revUniqueID 10504258328744Y New Button 2Epon mouseUp ct put fact(99) into temp put 100 into n repeat with i = 100 to 110 pr i&&sci(fact(i),6) put (i*temp)into temp pr i&&sci(temp,6) pr end repeat pr sci(100*fact(99)) end mouseUp P)a cREVGeneral revUniqueID 1050426583822 5turtleGraphic@KF{#  cREVGeneral revUniqueID 1056306874821 6] New Field 1)`/  cREVGeneral revUniqueID 1056308219708 5 >-69,-248,-69,552,-93.074435,0,-34.264486,496.529344 -69,0 W-93.074435,0,-34.264486,496.529344,-118.387794,0,-2.215991,486.316885 -93.074435,0 X-118.387794,0,-2.215991,486.316885,-146.447868,0,24.225252,469.968814 -118.387794,0 W-146.447868,0,24.225252,469.968814,-179.434464,0,41.537435,448.52137 -146.447868,0 P-179.434464,0,41.537435,448.52137,-221,0,44.829617,423.479179 -179.434464,0 6^ `I08KF{#  cREVGeneral revUniqueID 11441028102748KF{#  cREVGeneral revUniqueID 11441028102758KF{#  cREVGeneral revUniqueID 11441028102768KF{#  cREVGeneral revUniqueID 11441028102778KF{#  cREVGeneral revUniqueID 11441028102788 Button 1Ep|local G on mouseUP put 0 into vx put 3 into vy put 150 into L st fd 150 put .1*L^2 into G pd setdragTo 0 repeat until the mouseclick incXY vx,vy add accx() to vx add accy() to vy end repeat choose the browse tool end mouseUP function accx return -G*xcor()/distance(0,0)^3 end accx function accy return -G*ycor()/distance(0,0)^3 end accy q3o cREVGeneral revUniqueID 1056939372204 bookmarks breakPoints handlerListmouseUP accx accy tempScript prevHandleraccxscript 8turtleGraphic@KF cREVGeneral revUniqueID 10569394983258 Graphic 1KF. cREVGeneral revUniqueID 10569397382759 Button 1Epon mouseUP put 8 into vRiver put 6 into vBoat startTurtle showTurtle setDragTo 0 repeat 50 seth 0 fd vRiver seth 90 fd vBoat subtract .3 from vBoat --wait 5 ticks end repeat choose the browse tool end mouseUP  . cREVGeneral revUniqueID 1072887154194 bookmarks breakPoints handlerListmouseUP tempScript prevHandlermouseUPscriptSelectionchar 245 to 244script 9turtleGraphic@KF* 77 cREVGeneral revUniqueID 1072887239608 :FfieldLabel126+E cREVGeneral revUniqueID 1073238418659 .z y :GfieldLabel127+g cREVGeneral revUniqueID 1073238418703 .z z :HfieldLabel128+ cREVGeneral revUniqueID 1073238418747 .z x :JfieldLabel129+E cREVGeneral revUniqueID 1073238419002 .z y :KfieldLabel130+g cREVGeneral revUniqueID 1073238419044 .z z :LfieldLabel131+ cREVGeneral revUniqueID 1073238419088 .z x :NfieldLabel132+E cREVGeneral revUniqueID 1073238419337 .z y :OfieldLabel133+g cREVGeneral revUniqueID 1073238419380 .z z :PfieldLabel134+ cREVGeneral revUniqueID 1073238419424 .z x :RfieldLabel135+E cREVGeneral revUniqueID 1073238419676 .z y :SfieldLabel136+g cREVGeneral revUniqueID 1073238419719 .z z :TfieldLabel137+ cREVGeneral revUniqueID 1073238419764 .z x:U DufωPNG  IHDRufYgAMA=-fPLTEٟtRNS0JfIDATx݋r\P:Eqw!=Ω2"Io;.%}cuPꠚA5jVլYT:fuPꠚA5jVլYT:fuPf}Nkms~?Ҹ9= oqBןnOۂ[ͣrWmNg_ ^3\L^活yYRlunnenߣܞ>-"ů&}rs59ߣܜoIm ?z ~7T&ӷީ,Ε7;\Wo/oN6/^ޜnq-k_Ne]nk7TJ[\}tpU#ׯܞrnjչUW=:[{\\0WQzF:7w4HoOW:=W4Hչ鹡1>nuKqCct]K uV~FkνN pNrXW77;/wShuvZ\ߕtr3Vrgb`V7;SpunwRXzZծNɭ:J˯N\I(27Ri\l\H߁d/Qh\T\Gt3qu?F6WtEOe:7=wQ|;2zuzչi"Wntn sٓp5f,vp5FtSp %gk(1BiVg*}ϏOFrkTsùmnNw>(`up&[K>&XǒV-7\X泝!oݜs )6v{pqdu==]0l?Ygu}g#ά;k?YtW{_V=wF/{W!S7 _4`Xdې<DtTeH3l)t*A1X괠~TR:R;`A)i*dՍ!Vp4~RX*uӅ2:RI:!+ Ep괡TryH_[Tb8guPBVG*)8S! 9H%䀓VdpT?4qYӉ$`upaSÐ '7H%߀V]7g!I8'Xp':H? صOGGN5mӍn$`ulOBrt"#`N]vt"׀4z'ɧzt!#X]~t!#T!O@'NC:iՑJgNE҉4 1#$`uhSl 8}uZLѐ 3թI.qXf@0v=!ӓT :=I%ӓT .]OrH3$4NORI3$4B!Ͱ [4NORI3$4NORI3 Ҏ1$4NORI3$4NORI3 Ү1zfI*iXfI*iރխDV'`uzJV'`uzJoCj`u+fI*iXfI*i ]C{fI*iXfI*i i=XJ`uzJV'`uzJC:⻃I&iXfI*iXfI*i ɧ'`uzJV'`uzJBj`ufI*iXfI*i}^խGV'`uzJV'`uzJCj|IiXfI*iXfӐfXխGV'`uzJV',;dfI*iXfI*iXfN|zIV'`uzJV'86zV*iXfI*iXfI*i< }ހխJV'`uzJV'(vfI*iXfI*iXff؀խJV'`uzJV'pqߓOO2I3$4NORI3$4NORI3.dfI*iXfI*iXf[ڤ`uzJV'`uzJog؀խJV'`uzJV'`uzJf؀խJV'`uzJV'`uzJoguOrH9~CO1Cg8!ͧ$4|NrH󙫶Y3VguH^Y]/|ziV'Y]7|ꬮi>֮fuzJY#ǬcVguHv6ӓT|CV$4iVguH{|CX|:@Xݓ|~u eoS|$4}k[yNrHmݿsIi޹}wҮ~|Ii:1:wo,vC]V݇$4|~k:!of|C_^Z]?Ҽվ峝յ$4o?xNA7}iuH󆽽_`~87i>FwzԾu&?|H_^Z]!iK$͏G7C?!͏O!'9 $4jǧy|;t??#޺1ήO(Ggw3;vl}p;|>738}>6s8~g>58G>48'>339>2s9=19=09=/3:=.s:g=-:G=,:'=+3;=*s;<);<(;<'+8<&k8g<%8G<$8'<#+9<"kٿ?!پ? ٽ?+ڼ?kڻ{?ں[?ڹ;?+۸?k۷>۶>۵>;ش>{س{>ز[>ر;>;ٰ>{ٯ=ٮ=٭=;ڬ={ګ{= ڪ[= ک;= ;ۨ= {ۧ< ۦ<ۥ<'ؤ<gأ{<آ[<ء;<'٠<gY?Y?Yh.skGϩ column80)@red"6( FieldHeight0 fillcolorred cREVGeneral revUniqueID 1073573448335 4D ;? column90)@redJ6( FieldHeight0 fillcolorred cREVGeneral revUniqueID 1073573448360 4D ;@ column100)@redr6 FieldHeight0 fillcolorred cREVGeneral revUniqueID 1073573448385 4D ;Hcolumn0)@red6 FieldHeight0 fillcolorred cREVGeneral revUniqueID 1073574051497 4D  Graphic 2KFnjoo9 cREVGeneral revUniqueID 1087091732307=? Graphic 3KF122 cREVGeneral revUniqueID 1087091738962=J Button 1Epon mouseUP put the points of grc "foo" into tPoints st fd 200 bk 200 pu setxy mousePtToTurtlePt(line 1 of tPoints) pd repeat for each line tLine in tPoints setxy mousePtToTurtlePt(tLine) put xyCor() & return after turtlePoints end repeat put turtlePoints into field "data" put item 1 of line 1 of turtlePoints into x1 put item 2 of line 1 of turtlePoints into y1 put 0 into tArea repeat for each line tLine in turtlePoints put item 1 of tLine into x2 put item 2 of tLine into y2 add (x2 -x1)*(y1+ y2)/2 to tArea put x2 into x1 put y2 into y1 end repeat put return & tArea after field "data" choose the browse tool end mouseUP )Hj cREVGeneral revUniqueID 1087486119123 bookmarks breakPoints handlerListmouseUP tempScript prevHandlermouseUPscriptSelectionchar 186 to 185script =oturtleGraphic@KFq*~77 cREVGeneral revUniqueID 1087504974672 =xField 2)`89s cREVGeneral revUniqueID 1087510675170 = 180 > .628 90 > 0.318972 45 > 0.134087  =y `:q={ Dyf PNG  IHDRyfٹgAMA=-fPLTEٟtRNS0J IDATx rGEA IAZyoKʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<(( ʃ<((i5y2K8`x^8X0O8`\q絬㖃cY1;;r祬垃CYA;8wvln;<wV;񼌽wy9`.vsYlăVp6Mʃϓ8™2q;c<lx~rK|<lxA=񼅓\{y G9`+{y` s惭#8`k󻕄d handlerListmouseUP mouseUP breakPointsscriptSelectionchar 575 to 574 revUniqueID 1094158830849 bookmarks tempScript prevHandlermouseUPscript

--on mouseUP

-- put "This is a vertical line" into tMessage

-- put -100,100 into startHere

-- put the number of chars in tMessage into tNum

-- put 12 into charSeparation

-- startTurtle

-- penUp

-- setHeading -90

-- setXY startHere

-- repeat with i = 1 to tNum

-- forward charSeparation

-- label char i of tMessage

-- end repeat

--end mouseUP

--

on mouseUP

put "this is a sine function" into tMessage

put the number of chars in tMessage into tNum

put 100 into tHeight

put (the width of this card/tNum)/2 into tWidth

startTurtle

penUp

repeat with i = 0 to tNum

setxy round(tWidth*i),round(tHeight*sine(i/tNum*360))

label char i of tMessage

end repeat

choose the browse tool

end mouseUP

on mouseUP

put "This is a semi-circle" into tMessage

put the number of chars in tMessage into tNum

put 100 into R

startTurtle

setHeading -90

penUp

setxy -200,300

repeat with i = 1 to tNum

forward pi*R/tNum

left 180/tNum

label char i of tMessage

end repeat

end mouseUP

DturtleGraphic@CF'  cREVGeneral revUniqueID 1100990167701Datom1K@white  cREVGeneral revUniqueID 1100990167722Datom2K@white  cREVGeneral revUniqueID 1100990167798Datom3K@white  cREVGeneral revUniqueID 1100990167831Datom4K@white  cREVGeneral revUniqueID 1100990167862Datom5K@white  cREVGeneral revUniqueID 1100990167896Datom6K@white  cREVGeneral revUniqueID 1100990167930Datom7K@white  cREVGeneral revUniqueID 1100990167963Datom8K@white  cREVGeneral revUniqueID 1100990167994Datom9K@white  cREVGeneral revUniqueID 1100990168026Datom10K@white  cREVGeneral revUniqueID 1100990168062Datom11K@white  cREVGeneral revUniqueID 1100990168094Datom12K@white  cREVGeneral revUniqueID 1100990168126Datom13K@white)  cREVGeneral revUniqueID 1100990168162Datom14K@white6  cREVGeneral revUniqueID 1100990168196Datom15K@whiteC  cREVGeneral revUniqueID 1100990168229Datom16K@whiteP  cREVGeneral revUniqueID 1100990168262Datom17K@white]  cREVGeneral revUniqueID 1100990168298Datom18K@whitej  cREVGeneral revUniqueID 1100990168332Datom19K@whitew  cREVGeneral revUniqueID 1100990168365Datom20K@white  cREVGeneral revUniqueID 1100990168405Datom21K@white  cREVGeneral revUniqueID 1100990168443Datom22K@white  cREVGeneral revUniqueID 1100990168480Datom23K@white  cREVGeneral revUniqueID 1100990168517Datom24K@white  cREVGeneral revUniqueID 1100990168557Eatom25K@white  cREVGeneral revUniqueID 1100990168595Eatom26K@white  cREVGeneral revUniqueID 1100990168634Eatom27K@white  cREVGeneral revUniqueID 1100990168674Eatom28K@white  cREVGeneral revUniqueID 1100990168712Eatom29K@white  cREVGeneral revUniqueID 1100990168750Eatom30K@white  cREVGeneral revUniqueID 1100990168790Eatom31K@white  cREVGeneral revUniqueID 1100990168829Eatom32K@white   cREVGeneral revUniqueID 1100990168872Eatom33K@white-  cREVGeneral revUniqueID 1100990168913E atom34K@white:  cREVGeneral revUniqueID 1100990168953E atom35K@whiteG  cREVGeneral revUniqueID 1100990168995E atom36K@whiteT  cREVGeneral revUniqueID 1100990169037E atom37K@whitea  cREVGeneral revUniqueID 1100990169083E atom38K@whiten  cREVGeneral revUniqueID 1100990169124Eatom39K@white{  cREVGeneral revUniqueID 1100990169169Eatom40K@white  cREVGeneral revUniqueID 1100990169213E D}nPNG  IHDR}n3a gAMA=-fPLTEٟtRNS0JIDATxvGDQ4 DD>9nU!J?=.XXb}.Xb}.Xb}.Xb}.Xb}.Xb}.Xb}.++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++~ fM>6"K1_[C~I "sc`ϭ!=1D_N-rc`˭!-+X[CK~78`ǭ!>v"/I+n} 1D߾S 6"pc`/W "Xpc`!\N'oc`!|5Lz[C}8`!>r;8`!>r[8`!ݶ>vHj[Cm} o Ͷ>6"#CŶ>"X+)e^[C{m} H`!)^l1DV_ "Xjc`L / v"ic` V"Xic` /6"#󂅶>"Xii>[Cl} H`!u>f`^xR6[C|;R00<'Xfc`L O v"ec` V"Xec` O6"#CE>"X;"SÂ=>H`!5>H`!->H`!%3R09<$ac`!7R0:<"Xac`6"`c`  "X"݂>Hp`}!>Hp`{!},ROZC`p`w!}4RG>)x!\c`s!})x|+[c`o<1DOE ""ۂ>HK`g!>vHS`e!}:R!Xc`c<,1D/D ^_ "W"ρj} Km>H`Y!e}1R"*Uc`W_< V"X՗#o+M>6HwZCH7ZC{HWZCkHZC[HgZCKH'ZC;HGZC+H/R8O1R:W~3R[v7R@`9)x!%Mc`7)x")XMc`5)x#l1D<\)x%{i} H3!XKc`-D xV<邥>rQ 1D"Oe`%E hFZC.RX& "Xȅ2X+#e`!u\)x/c۸6R` "Xő3T#Of`!U\)x3#>Rh& "XD ^@~"Rl "XÏD 8~&Rp "XE ^0~*Rtf Vc3J~.Rx& 3H}2R|3F}|L,1D|| ާ#3HgYCHm| ݎHk%R9pzYC['RApvm|\s"1Dr"lܾH 1Ripb|Wn[#lHY˶9RpR펴m=C?,H0BhH Y!R!Y"R"'lY#R#,Y$R$'X%R%X&R&'lX'R' ,X(R( 'W)R) W)R) W*R* 'lW+R+ ,W,R,'V-R-V.R.'lV/R/,H U0R2U0R4lU0TZTH FK5T0eqPF#C *hPOH*gpu FO:lS08`~t8U FY> lR0/ 9`~u@GHolQ0HIZDH$&a#]ud+txM@H_9PT FґO0`{nO v'馣%#X``sq$?`mwllM0|`grlL0}M F?}`_v|\.He FzA#=w 6%A]= Fzn``MK ;#=4H!HOM~#=!؎`*X`W+j#.X`W$ ؋``+MHoqֻxZH㏟ .ǏuFz`[ Hok~GH+ #a |Hd|Hk=i9)փ>@W7M#}Yo;oF(c_t0ҧ |H{o06xjW#mf'|H12 and line i tList < 13 then label "12" end repeat choose the browse tool end mouseUP <r cREVGeneral revUniqueID 1101775205308 bookmarks breakPoints handlerListmouseUP tempScript prevHandlermouseUPscriptSelectionchar 465 to 464script EMturtleGraphic@CF', cREVGeneral revUniqueID 1101775411784EX myGraphicCF!a9){o " cREVGeneral revUniqueID 1101776593554 Edata2)`X: cREVGeneral revUniqueID 1103583669632 EJ 9.21 9.46 9.92 10.48 11.02 11.68 12.41 13.07 13.68 14.21 14.63 14.82 14.81 14.58 14.13 13.59 12.92 12.25 11.58 10.92 10.27 9.75 9.37 9.17 E `8E From formulaEpron mouseUP put 37*pi/180 into earthTilt put 30*pi/180 into latitude put 10 into yScale st ct put asin(.74*sine(37))*180/pi repeat with i = -37 to 37 --put i*pi/180 into tAngle --put asin(.74*sine(tAngle))*pi/180 put asin(sine(i))*180/pi into temp pr temp setxy i*5, yScale*(24*temp/180) end repeat choose the browse tool end mouseUP function nightHours theta,psi put tan(theta)/tan(psi) into temp return acos(temp) end nightHours on mouseUP put field "data2" into tList put 15 into xMUlt put 15 into yMult st hideturtle pu put 1 into i setxy i*xMult, yMult*line i of tList pd repeat with i = 1 to the number of lines in tList setxy i*xMult, yMult*line i of tList if i = 1 then label "Jan" if i = 12 then label "June" if i = 24 then label "Dec" end repeat choose the browse tool end mouseUP <2 cREVGeneral revUniqueID 1103727216232 breakPoints E Button 1Epon mouseUP put 200,300 into p0 put 20 into theta st drawAxes seth theta fd 500 put xyCor() into p2 pu setxy p0 put 0,0 into temp1 put 500,0 into temp2 pd setxy theDropPerp(temp1,temp2) setxy p0 seth theta rt 90 pd showturtle put 0,0 into p1 put perpDist(p0,p1,p2) into theDist fd abs(theDist) put item 1 of p0 into x0 put item 2 of p0 into y0 put cosine(theta) into c put sine(theta) into s put x0*c*c+c*s*y0 into xp put x0*s*c+s*s*y0 into yp setxy xp,yp label "perp" choose the browse tool end mouseUP on drawAxes fd 300 bk 300 lt 90 fd 300 bk 300 seth 0 end drawAxes :#T cREVGeneral revUniqueID 1105120024465 EturtleGraphic@KF cREVGeneral revUniqueID 1105120141092F"ButtonEpdon mouseUp put field "data2" into tPoints st repeat with i = 1 to the number of lines in tPoints put line i of tPoints into temp if line i of tPoints is not "" then setxy 5*item 1 of line i of tPoints, 5* item 2 of line i of tPoints end if end repeat put ycor()/xcor() into slope put slope choose the browse tool end mouseUp JR cREVGeneral revUniqueID 1122656969090 breakPoints9 F#turtleGraphic@K cREVGeneral revUniqueID 1122657136838 F&data2)`T%  cREVGeneral revUniqueID 1122657250723 F! 12,3 13,3 14,3 15,4 16,4 17,4 18,4 19,5 20,5 21,5 22,5 23,6 24,6 25,6 26,6 27,7 28,7 29,7 30,7 31,8 32,8 33,8 34,8 35,9 36,9 37,9 38,9 39,10 40,10 41,10 42,10 43,11 44,11 45,11 46,11 47,12 48,12 49,12 50,12 51,13F' `&F-ButtonFromJustifyEp on mouseUp put "" into field "results" lock screen --put line 3 of field 2 into field 3 --put line 1 of field 3 into tLine put field 2 into tField put empty into field 3 put empty into field "results" put the width of field 3 into Lw put the number of lines in tField into tLastLineNum repeat with j = 1 to the number of lines in tField if the shiftkey is down then exit to top put line j of tField into tLine if j = tLastLineNum then put tLine into line j of field "results" exit repeat end if put tLine into line j of field "results" put the formattedwidth of line j of field "results" into Fw put the margins of field "results" into tMargins put Lw - Fw - 2*tMargins into Ew --put (the number of words in tLine) - 1 into tNumWords put tildaRepacements(tLine, Ew) into tNewLine put tNewLine into line j of field "results" repeat with i = 1 to the number of chars in tNewLine if the shiftkey is down then exit to top put char i of tNewLine into tChar if tChar is "~" then put space into char i of line j of field "results" set the textsize of char i of line j of field "results" to 3 end if end repeat end repeat unlock screen beep end mouseUp function tildaRepacements tText, tNumLeft put the number of words in tText -1 into tNumSpaces repeat for each char tChar in tText if tChar is space and tNumLeft is not 0 then put " ~" after results subtract 1 from tNumLeft else put tChar after results end if --if tNumLeft = 0 then return results end repeat if tNumLeft > 0 then return tildaRepacements(results, tNumLeft) else return results end tildaRepacements -- repeat for each char tChar in tLine -- if tChar is space then -- put tChar & "~" after results -- else -- put tChar after results -- end if -- add 1 to i -- if i > Ew then exit repeat -- if i > tNumWords then put -- end repeat -- end mouseUp -- replace space with " " in tLine -- put tLine into line 1 of field 3 -- wait 1 sec -- repeat with i = 1 to the number of chars in tLine -- put char i of line 1 of field 3 into tChar -- if tChar is space then -- set the textSize of char i of line 1 of field 3 to 3 -- end if -- end repeat --end mouseUP --end repeat --repeat with i =1 to the number of chars in line 1 of field 3 -- put the formattedwidth of char i of line 1 of field 3 into tCharWidth -- add tCharWidth to results --end repeat --put the formattedwidth of line 1 of field 3 into tLinewidth --put the width of field 3 into tFieldWidth --put 0 into dw --put 12 into tTextSize --set the textsize of line 1 of field 3 to 12 --put "" into results --wait until the mouseclick --repeat 40 times -- put the formattedwidth of char 5 in line 1 of field 3 into tFormattedCharWidth -- put 12 + dw into tTextSize -- set the textsize of char 5 in line 1 of field 3 to tTextSize -- put tTextsize & comma & tFormattedCharWidth & cr after results -- add 1 to dw --end repeat --put results -- ----repeat with i =1 to the number of chars in line 1 of field 2 ----set the textSize of char i of line 1 of field 2 to item i of results ----end repeat --put results --end mouseUp R cREVGeneral revUniqueID 1122694529614 breakPoints9 14 F/ButtonEp4on mouseUp put 200 into rx put 100 into ry put 3 into n st pu put 0 into a put rx*cosine(a)^n into x put ry*sine(a)^n into y setxy x,y pd repeat with a = 0 to 360 put rx*cosine(a)^n into x put ry*sine(a)^n into y setxy x,y end repeat choose the browse tool end mouseUp R cREVGeneralscriptChecksumjRBN)Њk bookmarks revUniqueID 1122778807034 handlerListmouseUpscriptSelectionchar 131 to 130 prevHandlermouseUp tempScriptscript

on mouseUp

put 200 into rx

put 100 into ry

put 3 into n

st

pu

put 0 into a

put rx*cosine(a)^n into x

put ry*sine(a)^n into y

setxy x,y

pd

repeat with a = 0 to 360

put rx*cosine(a)^n into x

put ry*sine(a)^n into y

setxy x,y

end repeat

choose the browse tool

end mouseUp

F0turtleGraphic@Kz*77 cREVGeneral revUniqueID 1122779126831F:ButtonEp--local L on mouseUp st seth 90 Tree 100,10 choose the browse tool end mouseUp on Tree L,dL if L > 5 then lt 45 fd L tree L/2 bk L rt 90 fd L tree L/2 bk L lt 45 end if end Tree H{- cREVGeneral revUniqueID 1122925718689 breakPoints FHturtleGraphic@K'  cREVGeneral revUniqueID 1122925721363FKButtonEpYon mouseUp put 200 into r put -30 into a put .001 into c put 0 into angVel st pu showTurtle setRA r,a repeat until the mouseClick --put 90 - a into psi set the loc of grc "ball" to turtlePtToMousePt(xycor()) setRA r,a add -c*a to angVel add angVel to a end repeat choose the browse tool end mouseUp }LRs cREVGeneral scriptChecksum 3e+ c&b& handlerListmouseUp breakPointsscriptSelectionchar 332 to 331 bookmarks revUniqueID 1130756927805 prevHandlermouseUp tempScriptscript>

on mouseUp

put 200 into r

put -30 into a

put .001 into c

put 0 into angVel

st

pu

showTurtle

setRA r,a

repeat until the mouseClick

--put 90 - a into psi

set the loc of grc "ball" to turtlePtToMousePt(xycor())

setRA r,a

add -c*a to angVel

add angVel to a

end repeat

choose the browse tool

end mouseUp

FLturtleGraphic@K`mr cREVGeneral revUniqueID 1130757320792FTballKDah cREVGeneral revUniqueID 1130757725887FWSide bisectorsEqGon mouseUp answer "Click at any three points to create a triangle. Show bisectors intersect at a common point which divides the line in the ratio of 1 to 2." st pu --Set the three vertices of the triangle repeat with i =0 to 2 put clickPoint() into a[i] setxy a[i] pd end repeat --Find three midpoints setXY a[0] pu repeat with i = 0 to 2 setxy midPoint(a[i], a[(i+1) mod 3]) label "Midpoint" put xyCor() into mp[i,(i+1) mod 3] -- --Find point on perpendicular to the line -- seth direction(a[i]) -- rt 90 -- pd -- fd 200 -- put xyCor() into pointOnPerp[i] -- pu end repeat --Draw lines to midpoints; show they intersect at a common point. repeat with i = 0 to 2 pu setxy a[i] pd setxy mp[(i+1)mod 3,(i+2) mod 3] end repeat -- put intersection(mp[0,1],pointOnPerp[0],mp[1,2],pointOnPerp[1]) into tCenter -- setxy tCenter -- label "Center of circumscribed circle" --Get ditance from the intersection to any of the three lines. --put distance(a[1]) into centeredcircle r send "choose the browse tool" to me in 1 tick end mouseUP function midPoint a,b put avg(item 1 of a, item 1 of b) into x put avg(item 2 of a, item 2 of b) into y return x,y end midPoint function bisector b,c return avg(direction(b),direction(c)) end bisector 2commandfalsewcREVTempMaster6 traversalOntrueinksrcCopythreeDtrue hiliteBordertruerect 10,597,90,617 mnemonic0armFillfalse patterns showNametrue showIconfalsecolors sharedHilitetrueshadowfalse textAligncentermenuMouseButton1id1242altId0 labelWidth0number5 accelKey textStylelockLocfalse showHilitefalselabel autoHilitetruearmfalsestylestandard armBordertruenameLine bisectorsicon0toolTiplayer6 accelTextvisibletrue cantSelectfalse borderWidth2hilitefalse menuLines5margins4opaquetrue accelModscommand shadowOffset4defaultfalse menuName hiliteFilltrue showBordertrue textSize hiliteIcon0 disabledfalseautoArmfalse menuModefamily0 textFont menuHistory1 cREVGeneralscriptChecksumB]jM!WUL|o" revUniqueID 1144102062142 bookmarks handlerListmouseUp midPoint bisector tempScript prevHandlerbisectorscriptSelectionchar 159 to 158script

on mouseUp

answer "Click at any three points to create a triangle. Show bisectors intersect at a common point which divides the line in the ratio of 1 to 2."

st

pu

--Set the three vertices of the triangle

repeat with i =0 to 2

put clickPoint() into a[i]

setxy a[i]

pd

end repeat

--Find three midpoints

setXY a[0]

pu

repeat with i = 0 to 2

setxy midPoint(a[i], a[(i+1) mod 3])

label "Midpoint"

put xyCor() into mp[i,(i+1) mod 3]

-- --Find point on perpendicular to the line

-- seth direction(a[i])

-- rt 90

-- pd

-- fd 200

-- put xyCor() into pointOnPerp[i]

-- pu

end repeat

--Draw lines to midpoints; show they intersect at a common point.

repeat with i = 0 to 2

pu

setxy a[i]

pd

setxy mp[(i+1)mod 3,(i+2) mod 3]

end repeat

-- put intersection(mp[0,1],pointOnPerp[0],mp[1,2],pointOnPerp[1]) into tCenter

-- setxy tCenter

-- label "Center of circumscribed circle"

--Get ditance from the intersection to any of the three lines.

--put distance(a[1]) into centeredcircle r

send "choose the browse tool" to me in 1 tick

end mouseUP

function midPoint a,b

put avg(item 1 of a, item 1 of b) into x

put avg(item 2 of a, item 2 of b) into y

return x,y

end midPoint

function bisector b,c

return avg(direction(b),direction(c))

end bisector

F D}n PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J 9IDATxvF@>ג(@YY<#52q9HXꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ'5oc{r`Na—{~3^gӖs3kÜ_b{r`gwxm}rLw)0曌zGьQy4cŨ~a͘o1uG3[zGьQy4cŨ~a͘T4aYsu0Ƭ:s{cg9̽1kNޘ5Yyso̚<7f}i>4aYsu0Ƭ:s{cg9} ʬuYϼv:۠̚Iu^|Ys?:o2kg֕`dmPf ͺ]ch|qZq]hv=wE~܅ah|qZq]hv=wE=W\h g2 ~~~Yʐx} ;B7)m^vf]o,c^8)=9mrU~}f]o,cO͚יuLi/;Kg]p(Cٗ3]~n87Ys.n8f;͚d-f77ks;Oo?1߬5c|9:Ys[tpXg"|ۡΚ\aIF#35o&3/V?LߦϿ,C|꟯_2÷EV?Œ] Ͽ2|_fYK~[Vfqp~q̮_v~`tG7fϾљ+p=Y?3 ҹs ߃!mǔk-Li׷o.v=V6i靋v?s[+p|&ƴ-Wݵ[N”6}H ]tx>w2n;'gfq=Y?3Xphcك(C;ʡy1.ڢz0pS4C;- ?3?p kg{3^,[Qzͼx2}хv'XXV39f3cYdo~']f=۝~{gA;Mw|Cv; wtEV;wlG6;-Ȓ,v[Z`Mkط'[]=-bϢ,u훲U2JaUض+]]-d˲,t!e+.\u}Zk1-2car56*cezg6;[WKYڊܚ=֖ڬqIֶ7o {[/?g!?c-6;\׼:[ \eKYҬ*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*vZ$*IENDB` cREVGeneral revUniqueID 1187620879515F D}n6PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0JIDATxA0 ð?*!#4g*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*[mX>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>|ZZxpN$IENDB`F D}n VPNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J IDATxr@Q/}/[FkIi.@TK}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTwflUwv:[s͝͹msUzN?9]Ӱ&=͡|Y؈^i OW^FA(W|eHt߼11, V̸'go3Z·GXOg9΂/|w6|l h3ͧዧX7iŋA,߄簛Og/1J7+x=)gW>r9gRk5ϊNb=j>_۟x̎LbR6_bW&WlIM|>;Ne>9 ،]ϣ?[`3vSFîKgb!b? 9~e?BIJ^}ǑShHlgGbۯl?8~i۟uu퀬PM'dbom:źlHq,=V?8f9Ʊ@ BfCB?+nYIl}A(kK{e,Zrbj96mI\-Sp L1jC}͌G{2h… a7ɦt=p50vxcr{䊘go.e=qYv1|g=qi,y`j"QzXƃдx5JsM[- :YҿiJ\*rc TAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTTGxI~IENDB`F D}n\PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0JIDATxA#UDFX B̼_'n h?>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ1cc!8Cq11bc >|11cc!8Cq11bc >|11cc!8Cq11bc >|11cc!8Cq11bc >|11cc!8Cq11bc >|11cc!8Cq11bc >|11cc!8Cq1TAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}ҏ]S?q-3%򯹐H#i*~s4ȟBA dx( 5Ow}O2 ?|[l=Ggzo(`]|} i]ow &~dk)|1F f&ϳi4}3 }39{1[%z?P/7M#JL.32d(WoI\-EKqv*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>xP =IENDB` F fieldLabel1+% cREVGeneral revUniqueID 1187619924728 3 xF D}n 4PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J IDATxKr[[CA']x_pfW W0{?|}>ԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷԷ[666666wY }W ٬FجFجFجFجFجFجFجFجFجFجFجFجϷr(d>w>&룾&룾&룾&룾&룾&룾&룾&룾&룾&룾&룾&룾& 9X?U:kdz 91X?76kkkkkkkkkkkkk+9"1XS_QQQQQQQQQQQQQu鋊`]~*L}m E}K E}K E}K E}K E}K E}K E}K E}K E}K E}K E}K E}K V#?UW^U7^U7^U7^U7^U7^U7^U7^U7^U7^U7^U7^U7^M~9Cs5.u1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wm1Wgk55.UVmVmVmVmVmVmVmVmVmVmVmV3hc5-51Vm1Vm1Vm1Vm1Vm1Vm1Vm1Vm1Vm1Vm1Vtg[y,UUUUUUUUUUUtgSx+0U1U1U1U1U1U1U1U1U1U1UT_Sx0+0U 1U 1U 1U 1U 1U 1U 1U 1U 1UG@0UGR_SPSPSPSPSPSPSPSPSx[1}}fKx)հT T T T T T T T T'`qK Cux(0T-2T-2T-2T-2T-2T-2T-2Tj;ux*(S-S-S-S-S-S-S'3k3ux'u0S-2S-2S-2S-2S-2S-2S'JI}TA}TA}TA}TA}TA}TA}w.U0R[R_#5PPPPP&#xK lTWF7F7F7F ] :R}&O}LtV>2y/~~Ltދ>Y&:O}LtfWoZQ}&ՊwS.]]&: 9g^oH}Y8 qfxy흂wnS2ݦe{}n{+ gԷ>YyO3msڛ^^ni֣Ӭsۯ]^N3e﷣ˌs^wq@:8w}M.3](G}笏|^ClsՇaS.\hwa`3.7}e>܋n/g)n7+#7v7PR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)ꃔx5r~IENDB`5LightEp ^--local myLite,tOloc,tIloc,tfLoc,f,o,i,myName,tImageHeight,tObjectHeight,cPt,fPt,oPt,iPt --global x0,y0,showRays,tScale,rayPoints,r global x0,y0,r,tScale,f local myName,iLoc,oLoc,xMirror constant n = 1.33 on mouseUP put empty into myName set the layer of me to the top drawRays2 the mouseH, the mouseV hide button "radio0" put the loc of image 1 into tLoc send "choose the browse tool" to me in 1 tick set the layer of me to top end mouseUP on mouseLeave put "" into myName end mouseLeave on mouseDown --lock messages put x0 - r into xMirror put r/2 into f put the name of me into myName set the layer of button "light" to 1 repeat with i = the number of buttons down to 2 delete button i end repeat unlock messages end mouseDOwn on mouseMove x,y if myName is empty then exit mouseMOve set the loc of me to x,y end mouseMOve on drawRays2 tx,ty -- lock screen startTurtle -- pd -- seth 90 -- seth 0 -- fd 400 -- bk 800 -- home -- seth 0 pu set the loc of me to tx,ty put mousePtToTurtlePt(tx,ty) into oPt put the loc of me into oLoc -- put tx- xPlane into o put 9 into da put 5 into m set the style of templateButton to "radiobutton" set the width of templateButton to 20 lock messages repeat with i = 0 to m if there is no button "radio" &i then create button "radio" &i set the label of button ("radio" & i) to i end repeat unlock messages put 270 into tAngle setxy oPt seth tAngle pd fd 400 put xycor() into pt1[0] bk 800 put xycor() into pt2[0] pu repeat with i = 1 to m setxy oPt pd seth tAngle - i*da fd ycor()/cosine(i*da) put xycor() into pt1[i] pu put arcsine(sine(i*da)/n) into phi seth tAngle - phi bk 500 put xycor() into pt2[i] lock messages put (pt1[i-1],pt2[i-1],pt1[i],pt2[i]) into tTemp put intersection(tTemp) into Temp -- put ttemp -- -- put turtlePtToMousePt(intersection(pt1[i-1],pt2[i-1],pt1[i],pt2[i])) into temp -- --put 200,222 into temp set the loc of button ("radio" & i) to round(item 1 of temp) , round(item 2 of temp) put ttemp && " "&&temp & return after results -- unlock messages fd 500 pd fd 200 pu end repeat put results into field 2 --stopTurtle "tRays" unlock messages end drawRays2 function intersection p1,p2,pp1,pp2 get the paramcount if it is 1 then put item 4 of p1 into pp2 put item 3 of p1 into pp1 put item 2 of p1 into p2 put item 1 of p1 into p1 end if put item 1 of p1 into x1 put item 2 of p1 into y1 put item 1 of p2 into x2 put item 2 of p2 into y2 put item 1 of pp1 into xp1 put item 2 of pp1 into yp1 put item 1 of pp2 into xp2 put item 2 of pp2 into yp2 if x1 = x2 or xp1 = xp2 then if x1 = x2 then return x1&comma&yp2 + (x1-xp2)*(yp2-yp1)/(xp2-xp1) else return xp2&comma& y2 + (xp1-x2)*(y2-y1)/(x2-x1) end if end if if (y2-y1)/(x2-x1) = (yp2-yp1)/(xp2-xp1) then add .0000001 to y2--if lines are parallel put yp2 - y2 + x2*(y2-y1)/(x2 - x1) - xp2*(yp2 - yp1)/(xp2 - xp1) into numerator put ((y2 - y1)/(x2 - x1) -(yp2 - yp1)/(xp2-xp1)) into denom put numerator / denom into x put y2 + (x-x2) *(y2-y1)/(x2-x1) into y return x & comma & y end intersection function signum x if x >0 then return 1 else return -1 end signum c##d cREVGeneral revUniqueID 1056307176398 F D}n PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J VIDATxK+EAz6dIʎX2x/?Zꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ{Y_VAx KCX~rR`;^;_zذ>wl2.K@-"3_P'#_d!teȒ;u}!Gx;N6)fkC8.bĩf߷>CMn} g{G 8-oKZ~2<=t&sI_Q'87]oO;톹onO\,%{Ml<{5Š5Š]2 .O 6+YloL6{&7l6{ol׿fc|{/%q {" r_{v3?=reKV 7u_^ganet\v{ƹsA-/E|@ܴddn8k~3?lπCM?m}~?L8nañ?;?Ès=q}z361vmޡs 9ܴSYrY.O2x!|cN^|f 9!cs`ݏk^"~`k[ΰE;Ĩ7)*9fCAwcQx0;Qh<*Ά!o0߱oO|_ak+ߜb}>C{c}2C{e}l<1xhc=!͗?} ?/fT7`?M >*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>t&fIENDB`F D}n*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>fՙ֞[Cf{gĝ߶~/>|ԲLDLOA2ECd֗~{Oؑa)ݿ!^Wݾ^[ݽ^_ݼӾ.͘m\߭{1[L/]aywR h.\iCGt_-Ĵ(nu6]z6L>7´$NUV}]ӹjoكa[0|Wb m.Xa[~_p s2[~>W qϰm࣎ao}HX6$s'g+_;{a/eÿ;tlmƙS3llygfWrĐt ;rʜsL;DNiG]aea|A5,<~/i'ߜ3928W9wi2!c2ǯ1C28afd_w wQcL;񧶯|lBgc܍xţ1mwv0{ [7:~!^`r;b|a׷c Gbƻ7Þs~fðumk-^5 ޏ]K/YpԞ °'-oY{~K1_i#0üX_?\}J4gO@'YLޯu y ^lg޿k{[𐼖gu\Nz1K\M{6ȼ{/=7JooFx/2 վ7A/ m*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>x)IENDB` Gu fieldLabel1+%! cREVGeneral revUniqueID 1187620828766 EJ Jan Gv fieldLabel2+%o cREVGeneral revUniqueID 1187620828890 EJ 12 Gw fieldLabel3+%_K' cREVGeneral revUniqueID 1187620828997 EJ June Gx fieldLabel4+%g cREVGeneral revUniqueID 1187620829099 EJ 12 Gy fieldLabel5+%q cREVGeneral revUniqueID 1187620829189 EJ 12 Gz fieldLabel6+%$ cREVGeneral revUniqueID 1187620829297 EJ DecG} D}nrPNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J IDATxrQt*e 蝞s~$v*ebm/qIXK}>HQR)A E}ZkFKn2ߥ켺F|c<-]j.ʣ{̧>iO}2ߥ[lH|c<-][n&-yZ컸J|c<-]~Eܥe>1O|c.-2e>1O|?{eiO}2?Xa׵uZŞ>i->-yZSwymP|c<-]>rNm2eˇRmϥZŞ>iɟ[sh<-yZ|Ye>1O|r٪e>1O|cV|c<-}GeZqd<-yZ{玖>b-yZ{>f-yZS-}j-yZS-}n-yZS-}r-yZ莖>P~^<-yZ}]<-yZ U}\<-yZ䎖|-yZ쎖Q|-yZS-GZŞ>i;ZKa;̧>iO}2wֻhO}2WwҳhO}2e/h9wW2e>1O|_ro*ڣe>1O|c_5޴H|c_I|c<-]uG˱h<-yZkUw.-yZsjg<-yZ{Qv6-yZSw-u:-yZSw-:f<-pGtB-yZSw-7Ul2e>1O|7rt%+̧>iO}2mw\sN-yZgs.-yZSw%wU|c<-|GW2e>1O|Qqy{̷˥Z᧿7ZV?F@|83=w̼؛yhoI}{'Vwj;Fo/?W^G72_s} x_|1Oe|eZgZSŗq+OZ|e] g}\e{87|_>Wk۾gt/[WR߭.{mZ'zܮe.gyܥe-xܫe |㽑/oho%koqGo 2R- 2R-1o2R- u|K7G{|K7腖j[w?eZP3~P|K;2R-󝻾j=g\̷T|g'xٖj=';̷T|'?TeZuxgiT(gZ;O}Ko}ǣൿ--2){駽j/mOo%;z[eh}O{?>r-={63R-ꋦw̷T|=-2C~wj"gZ{e}gIo^Io^T߉>9׫F-=*gKo^ ;z[e'wjQߞxz[ewjI:gZ{ui_ i Ho[ߌjaw\{JyG|oP{=-2߃~}TzG|Km3R-}tGJ|2wߍsЗ-|79z=-2}wNoc7/Xe[hHon}''Wkc#\R| ٧e+ܟYe+Koޛʣh;J;z[eMo>9gZ&~_ ,8Y|ބAv\YeXi͖;K{;z[eX3R-ݱ,gZ滬fMJ[Q3V ?;YowYzvwҳ[L؛|7,=,cg:_sߵ{&Kn1n~go7Շ(Kn1iϾeckXKn1cs+'KnqKnqơs4KnqnLKnqnv\KnqnVstKnqz Knq}"Knqos2Knqd'㕖,}-rNj-=9q㎗[zvw= KnQoB#d-=ߗ>Kn?zaccO>Kn ?qhc9?kcY?goc/?rc?^vc/?yc/?T}c/} C􎵏ҳ[Tzp-􎵏ҳ[Knq|/Nޱ1\zv;ozp-kågnS{s$Knq|OX.=WHX.= IX.='MfK}ghQkågxwikågxgykågs|߶75cc77cc?iWgxozzp-. kågpX;K%)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}>HQR)A E}?Tt'B 5IENDB` G~ fieldLabel1+%( cREVGeneral revUniqueID 1187620835970 E perpG D}n,PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0JIDATxI@ ?}ZH?RTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQZzW~[xֿ'` Nwia&#l1Py{Nf6=Mb+^sܲ`kQe̹9A'9hT0"'Mr˨a8zxroĆIMI2~|cB!N+3\Ov9a?K#l8XsU'k,9YrC9^fux?,DZ<`d<ý6ys9u8r,>Xe8Nf6f4Ng2gY29;(:Aq{Ok(:<$ʻ1ǃLk(Suy)<ήw}hG[Gڍvx](o=l[G[ᖦy<*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*y/B9N4IENDB`G D}n PNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J SIDATxێVEQh uT*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>o5f̷6췙6o5mݬvb_\xo9uldԷֺw1Z[t[>Xn'ftn; ҟq%S0FfǍGr!ff|6)1:; mbb|511._e]wsssmZZ3A1me=lƽSt SmqR6RK<2Q0d£3u3mJvJ <3a0|mdl4޳v< w{~@lf~:yG3d?_ǾYg懿l3֫1X, 3kwLv_+2;F1@FM)yL24_(a1ʻ0(o$Ƙ-,>-87%8ra n1+8 jY~|bο_wF\qUξ2ڏyqQW~\sOL;is=0[3.nEX6~r~?8lIJ qrXx>B^䥏#~?Dm~`46''y{qwŹhr''}#}3$n :_ ⑜\Z^MA.^m]cpw~=g3A¯*y#gi ۟g 3azúuAÍz㺏SX|y ~Ź|}y1!ool08ǹ R߅ۥo?]7wsqpE^Α~ę|o/Wy{Nnѣ]ҝܧ{n~շCc\9G9ǹe3S\8g9t8˿kk9WM S|+} _?]%(_wopvz8;'soqzıini^d'>gdro~ﻭk|'~+ʇaU^;9cljӳRxʓpG?8cޣ^v^Nx#ȇ:;g^w zbؗf\c b|fȥC.G0/Z?V`j:{7f8v`!Ma1cbCI>|baI1ʛL>|cwba 2۾O>|Xdlbyl2R>|eWb2KU>|Ce-c,3֋X>|sfWc3ُ[>|Ygc3O2pl;{g7?gɰ iWVZљ̺vxl'`%ʨKjZީLo+aEˠkײ&Z廹̹vz/kbe̘l6[Lx3Kc}w6[ 6{5;nd͌+mvI}g`nE Np[>XnguldԷRv[ˀo1-gn[zo7mݬz5f̷V3j[|PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTAE}PQTdvuIENDB`GButtonEpwon mouseUp put 200 into tScale st sethome 200,-200 hideTurtle fd 100 bk 100 seth 90 fd 100 bk 100 repeat with phi = 0 to 179 step 1 if phi >89.8 and phi < 90.2 then next repeat put sine(phi) into tSine put cosine(phi) into tCos put 2-(1+tSine)*ln(1+tSine) + 2*ln(1+tCos) - (1-tSine)*ln(1-tSine) into temp put temp/pi into x --put 2/pi + 1/pi * tSine*ln((1-tSine)/(1+tSine)) + 2/pi*ln((1+tCos)/tCos) into x if phi <= 90 then put tsine into y else put 2 - tSine into y end if setxy tScale*x,tScale* y end repeat choose the browse tool end mouseUp R2 cREVGeneral scriptChecksumMrt\T handlerListmouseUp breakPointsscriptSelection char 52 to 51 revUniqueID 1187621026592 bookmarks tempScript prevHandlermouseUpscript

on mouseUp

put 200 into tScale

st

sethome 200,-200

hideTurtle

fd 100

bk 100

seth 90

fd 100

bk 100

repeat with phi = 0 to 179 step 1

if phi >89.8 and phi < 90.2 then next repeat

put sine(phi) into tSine

put cosine(phi) into tCos

put 2-(1+tSine)*ln(1+tSine) + 2*ln(1+tCos) - (1-tSine)*ln(1-tSine) into temp

put temp/pi into x

--put 2/pi + 1/pi * tSine*ln((1-tSine)/(1+tSine)) + 2/pi*ln((1+tCos)/tCos) into x

if phi <= 90 then

put tsine into y

else

put 2 - tSine into y

end if

setxy tScale*x,tScale* y

end repeat

choose the browse tool

end mouseUp

GturtleGraphic@C)66 cREVGeneral revUniqueID 1187621368836GButtonEp!on mouseUp put 200 into tScale st sethome 200,-200 hideTurtle fd 100 bk 100 seth 90 fd 100 bk 100 put 1 into dPhi repeat --with phi = 0 to 179 step 1 if phi >= 189 then exit repeat if phi >89.9 and phi < 90.1 then next repeat if phi >89.8 and phi < 90.2 then put .1 into dPhi else put 1 into dPhi end if put sine(phi) into tSine put cosine(phi) into tCos put 2-(1+tSine)*ln(1+tSine) + 2*ln(1+tCos) - (1-tSine)*ln(1-tSine) into temp put temp/pi into x --put 2/pi + 1/pi * tSine*ln((1-tSine)/(1+tSine)) + 2/pi*ln((1+tCos)/tCos) into x if phi <= 90 then put tsine into y else put 2 - tSine into y end if setxy tScale*x,tScale* y end repeat choose the browse tool end mouseUp )R cREVGeneral scriptChecksumݩa7A/93$t breakPoints handlerListmouseUpscriptSelectionchar 210 to 209 bookmarks revUniqueID 1187828797970 prevHandlermouseUp tempScriptscript

on mouseUp

put 200 into tScale

st

sethome 200,-200

hideTurtle

fd 100

bk 100

seth 90

fd 100

bk 100

put 1 into dPhi

repeat --with phi = 0 to 179 step 1

if phi >= 189 then exit repeat

if phi >89.9 and phi < 90.1 then next repeat

if phi >89.8 and phi < 90.2 then

put .1 into dPhi

else

put 1 into dPhi

end if

put sine(phi) into tSine

put cosine(phi) into tCos

put 2-(1+tSine)*ln(1+tSine) + 2*ln(1+tCos) - (1-tSine)*ln(1-tSine) into temp

put temp/pi into x

--put 2/pi + 1/pi * tSine*ln((1-tSine)/(1+tSine)) + 2/pi*ln((1+tCos)/tCos) into x

if phi <= 90 then

put tsine into y

else

put 2 - tSine into y

end if

setxy tScale*x,tScale* y

end repeat

choose the browse tool

end mouseUp

G D}nPNG  IHDR}n3a gAMA=-fPLTEٟtRNS0J%IDATx @ ðKw&'}ƫYꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ8` Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[Fpt6ln}2e Ggs7-o8:[?#< F*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*ꃊ>*_UyfyIENDB`5qadapt-or-die.au ` ?WRQU]rva[Y^k|ibaen]KFFMXj[NMOU_~aNK[xXHCK|PC>FRmŻS5)'-;uͽN>94/2<ܶA&+y5'#(?~LM?<9;YκiW?\8"!+4857rN./;ׯ-&8W./ZhZ⾮M+*0<<5<ⶬM@ڱ2$(H9'(sԴW&w/C4+=""61'j/?)"E)$l>,6ϰjkîT$)l2*7ʪuYaOV]ɮM ;g޵IŨ11ʽ4-&,sG85&'3/I#1!9-"9> ))-DCK/D 4<֙) *&'ܞ, + ,'+=9$%F+ '/8`+(3/= >E/'",;LB˿!"櫱F#!9[^>85>R¬eQ*.$ - A<"kM'6B9"Õ>H,!"+ 4-7V5=ET=*07M .?;0*ٿ' !1Բ<$41$)/բ<.($7\(&3/ )ǩ/3Qm2":+(1}H$M0-*&#ˤ"(6ө<;a"C;&"4ŭa-¨H_/)0𤙛Y .6*,//N:+($+ҬUBa3'/ϫǹ8$&6f*/wಛ02M7E4#N2(7pB3,7H]GGȽ\akO>23:OZ@xI-(-E]þ{m_QEDZŮ=,4aVG?BKWȯ0).AU+$*@;6GG-+++-:իS13>A=;J:($/ӰhWR2-1KIJ>*"$4ᯥR@G@812]M3=PTaOWK?>Iѷ[JmVQUC;DVֻXIFVD636IӾ¾z7-.3ANL?BG`»=./GMMtP:18dFC`OIP\ZWKJYmƿD52;TϾsG>MsY\TD@H^ϿX?<>AHU~ŶJ=:<<=LõQ>>M^_RM¾L>IlſO3-2:@^AǮRQME|:04jg5Ri`ɿ@Vƾ[uN/X?/ݩB1HF^澾K0&C^959*4HD"8ʱ/(g[9/}B%(B%إ-ǿYW?(ϭU7-//dW)?#ԩ)Z3/-\ ,C窱/8:ٹ8"M/944Rz003,>!#"9`=@`"8--K)FD65?F8Y(ţ)Ȯ(A߯Dkc%9E\YỾ<5*'#$U5%K^-,'S2M,=ź<-K5fʶ 25e3+,WHB.,MLӻ?,9sTAilʱ -9)+O:?}PCF4DVW^D6CƩ6>CYV>6z7e?N?R?=8J4.?[b?䬸j׽QH嬷ɼ/8*9]R6ȽO0/@½8F+.'CZ~s,.Eиfêm¼C4XMF840/ޯ<-OѵFT7IM'5.GL6H;4OA5WhGIlJC)9?dD82)Z789A?Hl|7/,O.C]ϩ@><7jIO׽ؿNZ\3B2E?,]FlLQUο?InW|`?:_cpC]6YLOOQ6LJRPϹߴwUJLKi?XY^NF?<Vb?Kfp_k`vm;[]oEھQDT_BXk|HhDh?VIUJZhCV\M~PNſQ@FDϷW>OO[G{C<`sH_eXzxXLmd;mOOfY\ܻt^^ȿĿ~|aOZT?8>3Bdzd]oNRogdVMHcQN:NyC]AD]^XȿZ\̽GM@[LwGؽr޸>v_I?nXCASWohS>ItuBuF]iK߿Z?rEL^]WOsLH\g^UlOnlMVMTjGgXphH^W_8ܹnoFeHGSKc=J[Jn׿ra>BWPLM?NaSbLMӾ\tmmb[EQjWWOKZsbzUMJ[II\޷somPxYM@>Nff\QKSNECKfVEEOM]NSO\nTN¾m\]:;WLCDN}WuRXAMw^OտhYVJUQNhWUBNUgWEO}ѺXShN`gg{|LzgZUmMKXhXG`uEkORQ?T̾^]sfG_RKKAGǿYFC^lC`o_KlW:>kRaY{QSBSO]s`OTѼVTLxXKLKLUSJjjNͺJNEDan><[W|iro^jSulvY_T]idVBXv^NZKzbeNePNiWd@]YqH;[glq_elZ[nJCLKot;̿OZ>tbTcRgBdIANKJ]`ZOVIJ@YwHSpE;NսklhyzXPIW\FQտUHUUWDa[h_i]??iӺA_O~LNLcfQ\SRElLM_o^X¿KIR|N=Ap\CXsK|XbZwZbwNLEjhhnVKCLPURBTM~`YhNGpWbUksyNIEEaKEG~[_Si\RGJgWWhWZgVVYmeMh`\LIHN]MRjn^Ve{lOQKý\d]by[XFMXnO?C]hRNSn``U][TNJFWk[Vquq\QI_XOdpi[k}k|Yg|nJONmmxf_NOI^l\HQbbbnWio[In~ZHt]]VgJKFV`iVvi^VfjXP]O^_VdUPZQKZc^aguMW~mmvx\QFRKU[eYl_^uZLqNI]OK\~ZOSQk޿_KWT_\Y]Ynn`pmPMdij\OQu`kjGKdjhfqcsKcnal[o[MuWVxrVlc_[U_GnUIiJnm\?L_XoAnp}oO{F]OQzHN}sF_XmNtHZE`ipZ~xnPISP]Mhyz\I]fND@MQHeS@BOm^^WNIcR\YsNeTESaZkOHnCSlU\BBbDKEDio?CQPKN?;Ef:D>s;p~O9?=μ>Q:b_HG\6NA[Iqa?8LSgoeMI@[W?nDILn@OrSlISFm~C[LWYmIFK]QVI89hP@i]NPQYK^F[]FVQJ\pNXֹjRT^?[GzWu_YTm[[LVaY[Nxg\AFO~IeRQeSZhr^OS}|rhmG\ginNMTH|^YQX\MgcP]N^nz}sslasLmpj^M_iUiaNife\^ooNgY\iKZSzolSY_jZj`wmTrQ_f{gYWciokdUeXc\dmqjbZW[qet{~~hn[}m\PbRxwl^_vewnc^oOfjtjjaOeednondoryT}Yxa^dsX^g^`mwoslW[_~[l_k~mq_[Tehy{gdaVsQ\\XXnO^YwLTx_Z~\f]`yrXehVOfT]OZNXWXOfiniZ]qfW[^\QmRm[^d]Ti`i\hZ_k\pin`a_u{^Qeqmlkn`SS|]kqk{TXxogjkT][iZ`jOGN_doW]OWaw|fMZ^^c`_UYkR\_jVL]lixWNm]cjwJJ[WtkVh`R_f\]Twdf]zO[ZwXRpN>bg?=NI_TVLYj>h<MݿcJfNOI\rcbbOV^`\sv\kY]oUHtomYNOUYckM[ZWo{]P[T]lzNyUkmQxcjeX_T{hLjWeLoNK\VsRnomKqSkhP|y{yb_UuS`fR]}LlQx`|[ra~]\gXy_`l\\]nemiO`hoR]\p`x^mdv_vwX[^^tZZpYc\^~_mkwx^k[}zvZk|Zhd]}ali^|n^[`tn`lnxd}oQSgS]bc[k^qbaYt\q\x\XlYc\Y_sXlf]n_XyS[tb]zh]^Xy\[^]gt]reljolUzgwx~uzaj]nzoi`y[odetcdhkmehoujxcqkhy]]GcLUgmbn_mOlOdIY{iNRNDNNK[xfVTkNrzimeXZK^\R]b`v~pz\WOZKud}|zmh_RP[SLqpPpeSLk~SiS~`k[YYNWJdbhtWR[K`]NkXoROFq_YvJW]?em\^tOdP]dldK[mX_TlQUO`KnPacZ[tnn]eOZlH^lkqNVdStFvM}w_IbqP\^kSiKrieay^j\x^\Nvn}\Xya^u|srZ]r`Ytv}pWnscRrZlXX|lZo[Qd\\m|hItd_cUo__KwUjbd_YQ^X_biUahYq\ShT_OVkbTYZX^MK}Sh{~U_\afhY[Tl_^^qdmro[_a}\\ffx__ldvcyh`fgcTvucm^piYu\Wdgqyl_ghfce_olhr^]ilrZe}lVd^[^VY{ys[i_lgt}gomjkmmo|o~q{zkiax{ej}roncqj}kj__zr{`]mrg~|^i~lygnhopyi_k]yd_bqk_ykhxZohkkdco_ht`ucslrvfkz`non\xcjyaqpucxfvtmfhqrma}dltfvk_hyzaWm}{h\goyvUzolbm|spxrjZuqhaonxobv\k}ze^rq~ivgjjsfgdoapjlbckdeozx^xIQmj_yh^LV^c]Vk[{IPWE^TYLE@NqL]igPWOVYxgTsQ^S>XgNxch}d[[qXZvZeR][Y[fZlmJb[RVOlP]QUoVV~uO_dmXw[ZUlZWT^VzZ_t^__\\VxZ~Xb]Z`KTiX`^SaZOoYTTy_QVY`\Y^vY]icLVZZ[\\RO[WtXO^RNwlIh\^]DOZvCEAgXE[3qCd?DHNXZ\EhHot^~d=PE]q=H:XYM[;NCO=w9[PP@Wj_s;_E|xxEhS^HV_dEWHXbT\nZW\NNlz[WXIX\UMTTH]FfjLiRtidGIlVH[di|pJlY`iMAkN_oGQje]HL`lYSiY_NZLIg\XfkSBfH\O_HhXGIKluggNNZb@hok\O_Pr_TccSsRXjkvWhYmvpK[WK{SeG]enaLT?Syzhy[X{h|[v\RRXShNTYT\So[WN\dThWIfMz]bG^Tjm{X?CA=ca[]RPNLjiIngqNOK^ojaZoIT>NLZgPg[RRYOomkPdfNNX{~T^[]KUf~Wx]inTe=]LFwc`SKx\YMdn|oyNNzgiPlq[UOkYjXTgTcGNTU\c_sWVEqrOksNY{LkLSR_K]L{gRjJHcaV}TOj{knqFg]kUWMTfUOaXbtXXUvTXMkiX^NhYsIVnt\NJiakKRS\KSxVVbdMUdo_KV_NbkTamwd^ghPsv`{[ks^_^lhkgl`dxNfh^tUX^fumnV_W_k^zadprmbdZk^}VlYXnmh|]lyon\Wl_ehTn^\g^k[olXl{jdzpgomppvn|dwv\w_m~xcaz]jiyrk^lozeow\esmmVuzjZkzz^_rwynvpnoauvaax_s^pyb|l}yztrj_~}un~hd{nuupp}|hxl~y~vnmwvqvdjomu}tpfot|om~ttyroyocnlv{}own}vznlkk}|ulnpn{xtn|h~~opnojuo~u}lrzkvvjqkm~}ionmlm}ox~}fby\`gShqQeiqokg`flXZv[T}^hpmrh^_Yvab~i]s^zYyklf_|jn`^w_d{nq]^~pe}h^^w}dp^^aoq~xajlhv|qdpeqognhrpnzti]hjnrfzhkfjmkdhquvsutxl_rx}tnZjofhykmfj`eum~tigboygxflav~_uxff{p{Xk~nyysq`ko`x|bziwi{g[wjz{ocwcfvr|~jip{tjinvumbxm^}ioerjlgmhmwpllgnwji}~ga~muhpgmp}krpzryxvqhuyz|iprejmxh{drepzyo{|lyxhwugl{phxuojx~ynrgnswv{momfw}qn{}ys~oqom}ns|}rgsskx|xwx|yxn{z~vqwr}|jrlyoznllvlwyxr|}ww~tswzxm{lnzv{qtv~uqn~{otz|swwozl}z|{qxuznoyy|twrpl~}nr}q~x~tr|xuvr}qowy}{tyuow||mw}ituyy~xqv{wszm}oz~}wsu}m~x|wn|}js~r}~~ws~ys{t}o~~tk{txq|}}kny~{quy|~oplyo|x|x|qpxtvuu|rnxqos||lprzooz~yvz{nzw{mw||zpxx~{r}|}xtxtwotyvtpy|{wwuyyunvupoqtqojo}ox~~w|zyyt~~o|r}nxylitqmwjg}~~}rptxolxt~~nkwimpotyh}~jxnrmhoxqyrunoqtur{dx~l|}jxh}t~nwzn~vzll{~lw~ktw{tsnr}xqq|vmzyp}p{{punuvmv|tvpy~ouzt~tp|~kz|}vmw|~zi{ww}qpdurxwbyoonybufhrsqwszhrq|xWALRmlQXl_enQN{nU]WNPW_MKK]LO[MJBqJ;׼4n;Qm_nIj`aG\>bVapxG^TjPdXg{VUW`RvF~Fq\Z\PcMhGKv[tGgvSP^Xn\V{ZObu>`_k]NacJXpnEyMcRqOEzNiyaQeSWOQVgy_PlS\FnfZT`njZ`ZN`jVuYOgSqJ{oMbTp]QJmlhT[dQNZjklNQiwmIV^QdrmcJa`pTdWTSZTkQemlNTc^bxdZQtit]ZO^R[osmTX[qh_lb[cJzfbw[TmVtzjhiVjU]d{SQ}Vg[e}]i^ycj_kZ\hih_Notdim_`uaX^cdzoWZl`eYrfU^|kt]R^lf^^nTb}^}eVajde[~ocq^k}]_rldkYcmotkmYx`_coX[{nmbXt]dmyhT_j^ac`]g~m`]ylocfjv~uy]lomfcla{f_Vvub_y]ZdoV]qV_aNa^]jS[YXg]cjcX^`TYQ|Zh[WmnXZvm_g|VZtV^qRb_Zv[Z_Y^k_hVZ^Ym^]wmW`d\ky\Xfu_q_XtYY~^k_Yl|a]m_]ab{[diXhkarZ]m]fs^kj]ih]f``qxfokZjdZuina^r`drdc|gcv_^{^`pfuu^j}nbl~u`tzadx]dk^ourbhg_jlhnqi\}`]~ae|fwe_vyidpiWTq{VXwMjkZl_ac_zydixdn^wmvfme}|xdlyrnmm}mb~mjtemtymg}vw^dz|bvsolxpekm{qmaqqy_ely\|grs}uc_vxyunirvgxwb}toijunog~m|}fx}owZhSgiStreTZt]{`ckjndpxYkt|gfnevej\|gvoqR~hmnic_w~pgixjpmgxzvrsisgolhjxhdnlu~nxyrzksi}|seqospl|ntyjk{wjqqaygfwzulml{vue}~xvcvtkrs~zjdv|svzksmmmkerbckb[u{vnmzareaiokwroyeiahpn{q}]wnndj}mvqdvi}|pekx}gg{jmlg}rkszslhzsjs}glxxvey|notxtpeyv{lg~{|mwhmxyzqusjtsqpg}pmntvzisln|~}ym}hx{wzumxs~jltux|ls{~yvyrtl~nll|v}|mvprpgt}~}ny~~x{t|q~}x~vj{|~rvpqsyw~}vnsx|uuxusxuu||v|q|tq~|vs~{ozq}xqx{zr{|sxr{s}~vnx|qpztp|zy{yzx~}rt{w}r}w}yyvsv{yzsq{o{~y}sz{{{sxuz|y}}{x{v{q~x}z~{|~||v~|{{|{~}z}}|}y}u~yx~}|{~}x~~~~|y|z{||y||~zy|}~zyz~|~}|yz~~~}~}{~{}~{~zwx||~|y}}|}~~~}~}~~}|}~~|}}}||~~{}{|~|~~}|{{}~~}|~|~|~~~~{~|~}}~y}~}||}|}~y}~~}|}~}|}}~~{}}~}~|~}~~}|}|}~~~}|~}~~~|~~~}~}~}~}}~~}}|{~~~~}~~~|}}}}~~~~||}~}~~~~}}{~}~}|}~|~}}~~}~~~}~~}~~}~||||}~|}|}|}~~}~~~~~|~|{|}~}~}~}}~~|~~~}~|~~~}}}~}~}{|~}~~||}}z~}~~|{|~}~}~}|{~~~}}~~}}~}~~~{~}@