Trigonometric Slide Rule


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;

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);

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; }
pen thin=linewidth(0.5*linewidth());

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;
string angle_label;
for(int angle = 0; angle < 360; angle+=tick_every) {
  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