[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bike frame size calculation program
From: |
Emanuel Berg |
Subject: |
bike frame size calculation program |
Date: |
Wed, 31 Jul 2019 06:52:59 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) |
I just made an update to my bike frame size
calculation program, now it does inches, and
road bikes, as well as cm and MTBs.
Comments/corrections/etc welcome...
;;; -*- lexical-binding: t -*-
;; This file: http://user.it.uu.se/~embe8573/emacs-init/frame-size.el
;; https://dataswamp.org/~incal/emacs-init/frame-size.el
;;
;; Update history: 2019-05-06 02:51 first release
;; 2019-07-31 06:33 - got away w/ globals
;; - support for road bikes
;; - size in inches as well as cm
;;
;; frame size = length of seat tube
;;
;; measured from the top of the seat tube
;; down to the center of the bottom bracket
;;
<https://www.ebicycles.com/bicycle-tools/measure-frame/mountain-bike/hardtail>
;;
;;
;; rider height MTB frame size
;;
;; (cm) (cm)
;;
;; 4'10" - 148 - 13" - 14" 33 - 37
;; 5'2" 158
;;
;; 5'2" - 158 - 15" - 16" 38 - 42
;; 5'6" 168
;;
;; 5'6" - 168 - 17" - 18" 43 - 47
;; 5'10" 178
;;
;; 5'10" - 178 - 19" - 20" 48 - 52
;; 6'1" 185
;;
;; 6'1" - 185 - 21" - 22" 53 - 57
;; 6'4" 193
;;
;; 6'4" - 193 - 23" - 24" 58 - 61
;; 6'6" 198
;; <https://www.evanscycles.com/help/bike-sizing-mountain>
;;
;;
;; Example how to do the interval math for
;; a particular height
;;
;; height h = 190 cm
;;
;; h \in [185 193] cm so
;;
;; MTB frame size m \in [53 57] cm
;;
;; (190 - 185)/(193 - 185.0) * (57 - 53) + 53 cm = 55.5 cm
;;
;;
;; note: border cases will favor the smaller
;; frame, because experience tells us
;; this makes sense
(defun in-inclusive (a min max)
(and (<= min a)
(<= a max) ))
(defun compute-frame-size (h mtb)
(let*((table (if mtb '(((148 158) (33 37)) ; height to frame size
((158 168) (38 42))
((168 178) (43 47))
((178 185) (48 52))
((185 193) (53 57))
((193 198) (58 61)) )
'(((168 175) (54 55)) ; ditto road bike (URL source?)
((175 183) (56 58))
((183 191) (58 60)) )))
(intervals (cl-find-if (lambda (e)
(in-inclusive h (caar e)
(cl-cadar e) ))
table) )
(h-interval (car intervals))
(m-interval (cadr intervals))
(h-min (caar intervals))
(h-max (cadr h-interval))
(m-min (car m-interval))
(m-max (cadr m-interval))
(frame-cm (+ (* (/ (- h h-min)
(- h-max h-min)
1.0)
(- m-max m-min) )
m-min) )
(frame-cm-round (round frame-cm))
(frame-inches (round (/ frame-cm 2.54))) )
(message "frame size: %d cm (%d inches)"
frame-cm-round frame-inches) ))
;; MTB test:
;; (compute-frame-size 180 t) ; "frame size: 49 cm (19 inches)"
;; (compute-frame-size 190 t) ; "frame size: 56 cm (22 inches)"
;; RB test:
;; (compute-frame-size 180 nil) ; "frame size: 57 cm (23 inches)"
;; (compute-frame-size 190 nil) ; "frame size: 60 cm (24 inches)"
--
underground experts united
http://user.it.uu.se/~embe8573
https://dataswamp.org/~incal
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- bike frame size calculation program,
Emanuel Berg <=