## Motivation

On Twitter, Dan L (@d2thelhurst) asked (editing of [vector] is mine):

Hey physics, what do you think of “cos only” method of finding [vector] components? Compl angle and only use cos instead of same °, other trig func

His motivation was that students have trouble remembering which vector component requires cosine versus sine. For a long time, I’ve wanted to collaborate with our 9th grade geometry teachers to run a few quick trigonometry measurement labs, in which students take data in physics class and analyze/use the data in math class. I’d want to do it Modeling-style, where we don’t give them names for the ratios, just try to understand the relationship between angles and sides in a right triangle. Students would (hopefully) come away with a better understanding of similarity and trigonometric ratios. However, until the day comes that I finally write said curricular materials, I had the idea of making a trigonometric “slide rule” that students could use to look up angles and determine the cosines and sines (without necessarily using those names).

## GeoGebra version

See the Trigonometric Slide Rule on GeoGebraTube. This version is the easiest to use and gives you answers. No graph reading. Of course, if we are using a computer, we might as well use the computer to solve the full polar to rectangular problem, but if you want students to understand ratios, it’s probably best to leave them a little mental work.

## Paper-and-pencil version

### For students

One version blanks the grid outside the circle, and one version has a grid outside the circle. Students should be able to estimate the cosine and sine of angles to 2 decimal places.

### For teachers

This version lists the coordinates of points every 5 degrees. The coordinates have 3 decimal places.

### Source code

I used Asymptote to create the graphics. I have my version set to output PDF by default, but otherwise, here’s the sourcecode:

import graph;
defaultpen(fontsize(10));
pen thick_p = linewidth(1.5);
pen axis_p = black+fontsize(8);
pen grid_major_p = gray(0.5)+linewidth(1.0);
pen grid_minor_p = gray(0.7)+linewidth(0.5);
pen circle_p = thick_p+black;
pen radial_p = black;
pen radial_accent_p = linewidth(1.5)+radial_p;
pen degree_p = black;
real tick_major = 0.1;
real tick_minor = 0.02;
real tick_low = 0.97;
real tick_high = 1.03;
int tick_every = 5;
// letter paper with 0.5" margins:
real width = 8.5 inches - 2*0.5 inches;
real height = 11 inches - 2*0.5 inches;
size(width, height);
scale(true, true);
xlimits(-1.1,1.1);
ylimits(-1.1,1.1);
real axis_extend = 1.0;
real xmin = -axis_extend;
real xmax = axis_extend;
real ymin = -axis_extend;
real ymax = axis_extend;
real dummy(real x) { return 1.001*x; }
draw(graph(dummy,-1.0,1.0),invisible);
pen thin=linewidth(0.5*linewidth());
xaxis("",axis=LeftRight,axis_p,xmin=-1.1,xmax=1.1,Ticks(format="%",beginlabel=false,endlabel=false,Step=tick_major,step=tick_minor,begin=true,end=true,extend=true,pTick=grid_major_p,ptick=grid_minor_p),above=false);
yaxis("",axis=LeftRight,axis_p,ymin=-1.1,ymax=1.1,Ticks(format="%",beginlabel=false,endlabel=false,Step=tick_major,step=tick_minor,begin=true,end=true,extend=true,pTick=grid_major_p,ptick=grid_minor_p),above=false);
xaxis("",axis=YZero,axis_p,xmin=xmin,xmax=xmax,LeftTicks(beginlabel=false,endlabel=false,Step=tick_major,step=tick_minor,begin=false,end=false,NoZero,extend=false,pTick=axis_p,ptick=grid_minor_p),above=false);
yaxis("",axis=XZero,axis_p,ymin=ymin,ymax=ymax,RightTicks(beginlabel=false,endlabel=false,Step=tick_major,step=tick_minor,begin=false,end=false,NoZero,extend=false,pTick=axis_p,ptick=grid_minor_p),above=false);
draw((-1,0)--(1,0),axis_p+thick_p);
draw((0,-1)--(0,1),axis_p+thick_p);
path unitsquare = (-1,-1)--(-1,1)--(1,1)--(1,-1)--cycle;
//filldraw(Circle((0,0),1)^^(scale(1.1)*unitsquare),evenodd+white,white); // mask the grid outside the circle
for(int angle = 1; angle < 360; ++angle) {
if (angle % tick_every == 0) continue;
draw(tick_low*dir(angle)--dir(angle),radial_p);
}
string angle_label;
for(int angle = 0; angle < 360; angle+=tick_every) {
draw(0.97*dir(angle)--tick_high*dir(angle),radial_accent_p);
angle_label = "$"+format("%d",angle)+"^{\circ}$";
//angle_label = "$"+format("%d",angle)+"^{\circ}\ ("+format("%#1.3f",Cos(angle))+","+format("%#1.3f",Sin(angle))+")$"; // for cheat sheet
label(rotate(angle)*Label(angle_label),tick_high*dir(angle),dir(angle),degree_p);
}
draw(Circle((0,0),1),circle_p);