views:

244

answers:

4

I don't need a physically accurate function, but something that hints at the involute curves, etc. I was just using r = 2 + sin^2, which gets the idea across, but it looks like - ahem. Googling around, you can find plenty of information on how to draft a 'correct' gear, but nothing in the way of a bare-bones approximation.

EDIT: The 'look' that I'm after: http://www.cartertools.com/involute.html

A: 

How about r = 2 + sin(24*theta)^12? It's sort of hard to know what you want without you being more specific in your question.

David Zaslavsky
It does look a bit like a gear, but more like the escapement gear on a watch than something to take torque. It's the bulky, angular shape of teeth that you get with an involute construction that I'm after. (See the new link, above.)
This isn't really programming-related, so I'm not going to get into details, but you're probably going to need a piecewise function, which you could probably approximate using a Fourier series.
David Zaslavsky
A: 

It looks to me as though the Wikipedia article on involute curves answers your question. It says:

“In polar coordinates (r, θ) the involute of a circle has the parametric equation:

r = a sec α

θ = tan α − α

where a is the radius of the circle and α is the parameter.”

If you need this in a form parameterized by θ instead of α, then you're going to need to solve it numerically, as I don't think there's a symbolic solution. You'll also need to take care, since there are infinitely many solutions for r in terms of θ (because of the way the involute spirals about the circle):

Gareth Rees
+1  A: 
from pylab import *

nteeth = 30
inner = 10
outer = 12

# these are in teeth-hundredths, but half the actual measurement
bottom_width = 22
top_width = 15

def involute_r(angle):
    '''angle is given in teeth-hundredths'''
    angle = angle % 100
    if angle > 50:
        # symmetry
        angle = 100 - angle

    if angle < bottom_width:
        return inner
    if angle > (50 - top_width):
        return outer
    halfway = (inner + outer) / 2.0
    transition_width = 50 - top_width - bottom_width
    curve = 1.0 - (angle - (50 - top_width))**2 / (transition_width ** 2)
    return   halfway +  curve * (outer - halfway)


fig = figure()
ax = fig.add_subplot(111, polar=True)
theta = np.arange(0, 2*pi, 0.001)
r = [involute_r(t * nteeth * 100 / (2 * pi)) for t in theta]
ax.plot(theta, r)
ax.set_ylim(inner, outer+1)
show()
thouis
A: 

That equation for the involute is correct. You use it relative to the pitch radius. I know you're not going for exact, but in practice, that's not quite the right shape. A good gear design book will walk you through all of the quirky details about things like the radius at the base for stress relief. You can read old versions online using Google Books, and this isn't something that has really gone out of date. It's really pretty fascinating, and you might find some details there which would help make your shape look authentic.

MPG