How to make Gear Ratios

I am writing a software in Java, for my Computer Science IA that shows how gear Ratios work, However the only problem with it is that I have no idea of how to draw a gear in processing, please could somebody help me out?

1 Like

ok, when i google it i found 2 examples, one archived at open processing and one at old forum
working BOTH in processing 3.5.3 without problem.

so you want to learn how to make it? ( project guidance? )

-a- you have the math
RATIO / radius / diameter / distance of the two circles / circumference /
already in processing?

-b- need to decide about HMI /operation
what are the parameter to change / how the user can do that.

-c- display the set and calculated values on the canvas

-d- draw the 2 circles in correct distance ( put a marker on )
and rotate them


so without the difficult math and graphic part about the

gear teeth profile

you already can show something


-e- the next approximation would be just to put circles on the circumference
as symbols for the gear teeth
to show the gear basics : even sized and spaced teeth ( not angle spaced )
on two different diameters.
and visualized the math / data for it too.

-f-
well for the main fun, to draw

( for long lasting mechanic )
you should experiment in a extra little drawing project first.
please show us that too.


hope see some good code and show ( pictures ) here soon.

1 Like

Studio.ProcessingTogether.com/sp/pad/export/ro.9WrTp2GiTlnLW

1 Like

There are many approaches to this.

My video will share some insight on how I built the gears:

A visual approach (colours, lines, plots, display data, etc) helped me to develop and refine the code.

I started with a simple shape and later manipulated the vertices with a lot of math; fortunately, the math comes easily to me and I was familiar with the mechanics of gears and gear ratios.

My approach to this was a personal exercise; I enjoy coding from scratch and did not look at any other code or reference formulas. I get great satisfaction from this approach but it is not for everyone.

After all, that was said and done I created a gear class to make and move any gear.
Planetary gears were my final challenge.
:slight_smile:

I am sharing a snippet of my early code (its messy!) to show how I started:

PShape s;  // The PShape object

float a = 15;
float d = 15;
float pitch1 = 60/2;
float gWidth = 0;
float gsa = 5;
float gsd = 1;

PVector g3, g4, g5, g6, g7, g8;

void setup()
  {
  size(300, 100, P3D);
  
  s = createShape();
  s.beginShape();

  s.fill(255, 255, 0);
  s.noStroke();

  s.vertex(-a, -0, gWidth); s.vertex(-a, -pitch1/2+gsa+gsd, gWidth); 

  s.vertex(-a, -pitch1/2+gsa+gsd); s.vertex(0, -pitch1/2 +gsd, gWidth);
  s.vertex(0, -pitch1/2+gsd); s.vertex(+d, -pitch1/2, gWidth);          

  s.vertex(d, -pitch1/2); s.vertex(+d, +pitch1/2, gWidth); 

  s.vertex(+d, pitch1/2); s.vertex(0, pitch1/2-gsd, gWidth);   
  s.vertex(0, pitch1/2 -gsd); s.vertex(-a, pitch1/2-(gsa+gsd), gWidth );

  s.vertex(-a, pitch1/2-(gsa+gsd)); s.vertex(-a, -0, gWidth);    
  s.endShape(CLOSE); 
  
  g3 = new PVector(0, 0);
  g4 = new PVector(0, 0);
  g5 = new PVector(0, 0);
  g6 = new PVector(0, 0);  
  g7 = new PVector(0, 0);
  g8 = new PVector(0, 0);   
  }
  
void draw()
  {
  background(0);

//Shape  
  shape(s, width/3, height/2);
   
//Lines   
  translate(width/2+15, height/2); 
  strokeWeight(2);
  stroke(255, 255, 0);
  
  line(-a, -0, gWidth,                     -a, -pitch1/2+gsa+gsd, gWidth); 

  line(-a, -pitch1/2+gsa+gsd, gWidth,       0, -pitch1/2 +gsd, gWidth);
  line(0, -pitch1/2+gsd, gWidth,           +d, -pitch1/2, gWidth);          

  line(d, -pitch1/2, gWidth,               +d, +pitch1/2, gWidth); 

  line(+d, pitch1/2, gWidth,               0, pitch1/2-gsd, gWidth);   
  line(0, pitch1/2 -gsd, gWidth,          -a, pitch1/2-(gsa+gsd), gWidth );

  line(-a, pitch1/2-(gsa+gsd), gWidth,     -a, -0, gWidth);    
    
//PVectors
  
  translate(width/4-15, 0); 
  
  float ab = 15;
  float pitch = 60/2;
  
  g3.set(ab/2, -pitch/2);
  g4.set(ab/2, pitch/2);
  
  g5.set(-ab/2, -pitch/2);
  g6.set(-ab/2, pitch/2);
  
  g7.set(-1.5*ab, -10);
  g8.set(-1.5*ab, 10);
  
  strokeWeight(2);
  beginShape(POINTS);
  vertex(g7.x, g7.y);
  vertex(g5.x, g5.y);
  vertex(g3.x, g3.y);         
  vertex(g4.x, g4.y);
  vertex(g6.x, g6.y);
  vertex(g8.x, g8.y);
  endShape();  
  }

After that I used a lot of math to manipulate the vertices.

My final code is much more refined than above.
I will not be sharing my final code.

Enjoy the journey!

Lots of resources here:

:slight_smile:

1 Like