|
|
|
Thread Tools | Display Modes |
|
#1
|
|||
|
|||
program to compute gears, with table
Hey guys, does this look right to you?
;; (print-gears '(34 50) '(12 13 15 17 19 21 23 25) 622) ;; ;; = ;; ;; 622 wheel ;; ;; chainring sprocket gear ;; ;; 34 25 2657.5360544880004 ;; 34 23 2888.626146182609 ;; 34 21 3163.7333982000005 ;; 34 19 3496.7579664315795 ;; 50 25 3908.1412566000004 ;; 34 17 3908.1412566000004 ;; 50 23 4247.97962673913 ;; 34 15 4429.226757480001 ;; 50 21 4652.549115000001 ;; 34 13 5110.64625863077 ;; 50 19 5142.291127105264 ;; 34 12 5536.5334468500005 ;; 50 17 5747.266553823531 ;; 50 15 6513.568761 ;; 50 13 7515.656262692309 ;; 50 12 8141.960951250001 (require 'cl-lib) (defun compute-gear (chainring sprocket wheel) (let*((pi 3.14159265) (radius (/ wheel 2.0)) (circum (* 2 radius pi)) (gear (* (/ chainring sprocket 1.0) circum))) (list chainring sprocket gear))) (defun gear (chainrings sprockets wheel) (let*((gears (cl-loop for c in chainrings append (cl-loop for s in sprockets collect (compute-gear c s wheel) ) ))) (cl-sort gears #'= :key #'cl-caddr))) (defun print-gears (chainrings sprockets wheel) (let ((out-buffer (get-buffer-create "*Gears*"))) (with-current-buffer out-buffer (erase-buffer) (insert (format "%s wheel\n\n" wheel)) (insert "chainring sprocket gear\n\n") (let ((gears (gear chainrings sprockets wheel))) (cl-loop for g in gears do (let ((c ( car g)) (s ( cadr g)) (d (cl-caddr g))) (insert (format " %s %s %s\n" c s d)) )))) (pop-to-buffer out-buffer) )) -- underground experts united http://user.it.uu.se/~embe8573 |
#2
|
|||
|
|||
program to compute gears, with table
"Emanuel Berg" wrote in message ... Hey guys, does this look right to you? ;; (print-gears '(34 50) '(12 13 15 17 19 21 23 25) 622) ;; ;; = ;; ;; 622 wheel ;; ;; chainring sprocket gear ;; ;; 34 25 2657.5360544880004 ;; 34 23 2888.626146182609 ;; 34 21 3163.7333982000005 ;; 34 19 3496.7579664315795 ;; 50 25 3908.1412566000004 ;; 34 17 3908.1412566000004 ;; 50 23 4247.97962673913 ;; 34 15 4429.226757480001 ;; 50 21 4652.549115000001 ;; 34 13 5110.64625863077 ;; 50 19 5142.291127105264 ;; 34 12 5536.5334468500005 ;; 50 17 5747.266553823531 ;; 50 15 6513.568761 ;; 50 13 7515.656262692309 ;; 50 12 8141.960951250001 (require 'cl-lib) (defun compute-gear (chainring sprocket wheel) (let*((pi 3.14159265) (radius (/ wheel 2.0)) (circum (* 2 radius pi)) (gear (* (/ chainring sprocket 1.0) circum))) (list chainring sprocket gear))) (defun gear (chainrings sprockets wheel) (let*((gears (cl-loop for c in chainrings append (cl-loop for s in sprockets collect (compute-gear c s wheel) ) ))) (cl-sort gears #'= :key #'cl-caddr))) (defun print-gears (chainrings sprockets wheel) (let ((out-buffer (get-buffer-create "*Gears*"))) (with-current-buffer out-buffer (erase-buffer) (insert (format "%s wheel\n\n" wheel)) (insert "chainring sprocket gear\n\n") (let ((gears (gear chainrings sprockets wheel))) (cl-loop for g in gears do (let ((c ( car g)) (s ( cadr g)) (d (cl-caddr g))) (insert (format " %s %s %s\n" c s d)) )))) (pop-to-buffer out-buffer) )) -- underground experts united http://user.it.uu.se/~embe8573 Not sure about your code as I do not speak that language but a quick check gives: 622*3.142*50/25=3908.648mm So if your definition of gear is roll out in mm then it looks close. Do not forget to include the tyre. See: https://www.cateye.com/data/resource..._chart_ENG.pdf for approximate circumferences. Taking a 23mm tyre the above example would be: 2096*50/25=4192mm Graham. --- This email has been checked for viruses by Avast antivirus software. https://www.avast.com/antivirus |
#3
|
|||
|
|||
program to compute gears, with table
On 9/8/2017 4:46 AM, Graham wrote:
"Emanuel Berg" wrote in message ... Hey guys, does this look right to you? ;; (print-gears '(34 50) '(12 13 15 17 19 21 23 25) 622) ;; ;; = ;; ;; 622 wheel ;; ;; chainring sprocket gear ;; ;; 34 25 2657.5360544880004 ;; 34 23 2888.626146182609 ;; 34 21 3163.7333982000005 ;; 34 19 3496.7579664315795 ;; 50 25 3908.1412566000004 ;; 34 17 3908.1412566000004 ;; 50 23 4247.97962673913 ;; 34 15 4429.226757480001 ;; 50 21 4652.549115000001 ;; 34 13 5110.64625863077 ;; 50 19 5142.291127105264 ;; 34 12 5536.5334468500005 ;; 50 17 5747.266553823531 ;; 50 15 6513.568761 ;; 50 13 7515.656262692309 ;; 50 12 8141.960951250001 (require 'cl-lib) (defun compute-gear (chainring sprocket wheel) (let*((pi 3.14159265) (radius (/ wheel 2.0)) (circum (* 2 radius pi)) (gear (* (/ chainring sprocket 1.0) circum))) (list chainring sprocket gear))) (defun gear (chainrings sprockets wheel) (let*((gears (cl-loop for c in chainrings append (cl-loop for s in sprockets collect (compute-gear c s wheel) ) ))) (cl-sort gears #'= :key #'cl-caddr))) (defun print-gears (chainrings sprockets wheel) (let ((out-buffer (get-buffer-create "*Gears*"))) (with-current-buffer out-buffer (erase-buffer) (insert (format "%s wheel\n\n" wheel)) (insert "chainring sprocket gear\n\n") (let ((gears (gear chainrings sprockets wheel))) (cl-loop for g in gears do (let ((c ( car g)) (s ( cadr g)) (d (cl-caddr g))) (insert (format " %s %s %s\n" c s d)) )))) (pop-to-buffer out-buffer) )) -- underground experts united http://user.it.uu.se/~embe8573 Not sure about your code as I do not speak that language but a quick check gives: 622*3.142*50/25=3908.648mm So if your definition of gear is roll out in mm then it looks close. Do not forget to include the tyre. See: https://www.cateye.com/data/resource..._chart_ENG.pdf for approximate circumferences. Taking a 23mm tyre the above example would be: 2096*50/25=4192mm Graham. Right, don't forget to include the tire. 622 is bead seat diameter, but you want (effective) outside diameter instead. I first did such a thing in the 1970s, using Fortran. But I formatted it as a compact table in rows and columns. You could have one row for each chainring, one column for each rear cog. A matrix, 2x8. Another useful trick is to plot the gear development on a logarithmic scale, so the change from one gear to the next is scaled as the percentage change. Plotting using a separate row or a separate symbol for each chainring makes clear which gear is "next" in your gear progression. These days, it's probably easiest to do all the above using a spreadsheet, such as LibreOffice Calc. Or Micros**t Excel. BTW, back when there were only five rear cogs and a person wanted a wide range with uniform or other logical spacing, plotting gear development (or "gear inches," in "inch" countries) was a useful tool for the art of bike design. These days, with up to 11 cogs in back, the entire exercise isn't as valuable as it once was. -- - Frank Krygowski |
#4
|
|||
|
|||
program to compute gears, with table
On Friday, September 8, 2017 at 8:50:36 AM UTC-7, Frank Krygowski wrote:
On 9/8/2017 4:46 AM, Graham wrote: "Emanuel Berg" wrote in message ... Hey guys, does this look right to you? ;; (print-gears '(34 50) '(12 13 15 17 19 21 23 25) 622) ;; ;; = ;; ;; 622 wheel ;; ;; chainring sprocket gear ;; ;; 34 25 2657.5360544880004 ;; 34 23 2888.626146182609 ;; 34 21 3163.7333982000005 ;; 34 19 3496.7579664315795 ;; 50 25 3908.1412566000004 ;; 34 17 3908.1412566000004 ;; 50 23 4247.97962673913 ;; 34 15 4429.226757480001 ;; 50 21 4652.549115000001 ;; 34 13 5110.64625863077 ;; 50 19 5142.291127105264 ;; 34 12 5536.5334468500005 ;; 50 17 5747.266553823531 ;; 50 15 6513.568761 ;; 50 13 7515.656262692309 ;; 50 12 8141.960951250001 (require 'cl-lib) (defun compute-gear (chainring sprocket wheel) (let*((pi 3.14159265) (radius (/ wheel 2.0)) (circum (* 2 radius pi)) (gear (* (/ chainring sprocket 1.0) circum))) (list chainring sprocket gear))) (defun gear (chainrings sprockets wheel) (let*((gears (cl-loop for c in chainrings append (cl-loop for s in sprockets collect (compute-gear c s wheel) ) ))) (cl-sort gears #'= :key #'cl-caddr))) (defun print-gears (chainrings sprockets wheel) (let ((out-buffer (get-buffer-create "*Gears*"))) (with-current-buffer out-buffer (erase-buffer) (insert (format "%s wheel\n\n" wheel)) (insert "chainring sprocket gear\n\n") (let ((gears (gear chainrings sprockets wheel))) (cl-loop for g in gears do (let ((c ( car g)) (s ( cadr g)) (d (cl-caddr g))) (insert (format " %s %s %s\n" c s d)) )))) (pop-to-buffer out-buffer) )) -- underground experts united http://user.it.uu.se/~embe8573 Not sure about your code as I do not speak that language but a quick check gives: 622*3.142*50/25=3908.648mm So if your definition of gear is roll out in mm then it looks close. Do not forget to include the tyre. See: https://www.cateye.com/data/resource..._chart_ENG.pdf for approximate circumferences. Taking a 23mm tyre the above example would be: 2096*50/25=4192mm Graham. Right, don't forget to include the tire. 622 is bead seat diameter, but you want (effective) outside diameter instead. I first did such a thing in the 1970s, using Fortran. But I formatted it as a compact table in rows and columns. You could have one row for each chainring, one column for each rear cog. A matrix, 2x8. Another useful trick is to plot the gear development on a logarithmic scale, so the change from one gear to the next is scaled as the percentage change. Plotting using a separate row or a separate symbol for each chainring makes clear which gear is "next" in your gear progression. These days, it's probably easiest to do all the above using a spreadsheet, such as LibreOffice Calc. Or Micros**t Excel. BTW, back when there were only five rear cogs and a person wanted a wide range with uniform or other logical spacing, plotting gear development (or "gear inches," in "inch" countries) was a useful tool for the art of bike design. These days, with up to 11 cogs in back, the entire exercise isn't as valuable as it once was. Almost the entire automobile industry is being programmed with languages like Python. Like Fortran these higher level languages are easy and fast to correct errors but everything is on the net now - Tesla updates all of their software off of the Internet. Higher level languages have millions of holes in them for hackers to gain control of your system. How would you like all of the traffic lights in your area to turn red at once and stay that way? How would you like pressing the accelerator on your car to act as a brake or visa versa? Being interviewed by electric car manufacturers for development jobs I can't seem to get it through their heads that they are placing their company's in grave danger by using languages that are not certifiable. Even the people that write in Assembly language don't do it as I do. They write utility groups and then simply make calls to these utilities. This is so clumsy that I write smaller, more compact and faster code in C. Though in general these assembly code groups are relatively safe compared to the higher level languages. |
#5
|
|||
|
|||
program to compute gears, with table
Frank Krygowski wrote:
I first did such a thing in the 1970s, using Fortran. Cool! Fortran (Formula Translation, 1957) sounds like the perfect idea. Perhaps the formating (output report) should be left to COBOL tho (Common business-oriented language, 1959). Today I think the hipsters at the universities would use Haskell (1990). But I formatted it as a compact table in rows and columns. You could have one row for each chainring, one column for each rear cog. A matrix, 2x8. The idea with having it 8x3 was that the third column would be the "roll out" and that would be sorted vertically. But perhaps I'll add a feature to flip it later. Another useful trick is to plot the gear development on a logarithmic scale, so the change from one gear to the next is scaled as the percentage change. Plotting using a separate row or a separate symbol for each chainring makes clear which gear is "next" in your gear progression. Yes, I thought about doing that. Perhaps with ASCII art or using gnuplot which I did some cool plots with. Here is one: http://user.it.uu.se/~embe8573/figur...e-inverted.png -- underground experts united http://user.it.uu.se/~embe8573 |
#6
|
|||
|
|||
program to compute gears, with table
Graham wrote:
So if your definition of gear is roll out in mm then it looks close. Do not forget to include the tyre. Right, perhaps I should change "gear" into "roll out" if that's the agreed-upon term. Perhaps I should even make it print the formulae first thing. And I'll include the tyre. Excellent -- underground experts united http://user.it.uu.se/~embe8573 |
#7
|
|||
|
|||
program to compute gears, with table
On Friday, September 8, 2017 at 10:45:07 AM UTC-7, Emanuel Berg wrote:
Graham wrote: So if your definition of gear is roll out in mm then it looks close. Do not forget to include the tyre. Right, perhaps I should change "gear" into "roll out" if that's the agreed-upon term. Perhaps I should even make it print the formulae first thing. And I'll include the tyre. Excellent There's always a slight error this way. The radius of a tire and hence it's circumference changes slightly with pressure and/or weight of the rider. |
#8
|
|||
|
|||
program to compute gears, with table
|
#10
|
|||
|
|||
program to compute gears, with table
In rec.bicycles.tech Emanuel Berg wrote:
:Hey guys, does this look right to you? As noted, you need to consider the diameter of the wheel including its tire. The style is awful. In straight common lisp: (defun compute-gear (chainring sprocket wheel) (list chainring sprocket (* (/ chainring sprocket) (* 3.14 wheel)))) (defun gear (chainring sprocket w) (let ((g)) (dolist (c chainring) (dolist (s sprocket) (push (compute-gear c s w) g))) (sort g #' :key #'third))) (defun print-gears (chainring sprocket wheel) (format nil "~:{ ~d ~d ~f ~%~}" (gear chainring sprocket wheel))) -- sig 46 |
|
Thread Tools | |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Table. | Marc[_2_] | UK | 6 | November 25th 09 10:29 AM |
Is Frame spacing for 7 Gears = to 5 Gears? | [email protected] | Techniques | 4 | April 13th 09 12:28 AM |
Now that's a table! | Bob Downie | UK | 4 | April 16th 07 06:23 PM |
Inversion Table | Bill B | Recumbent Biking | 3 | October 22nd 04 03:59 AM |
Gears gears gear..what to choose? | bstephens | Techniques | 8 | February 18th 04 04:06 PM |