type
status
date
slug
summary
tags
category
icon
password
本文摘自知乎idken的一篇回答,侵删。
说一个实际的例子吧,从没感觉离天才离我们如此之近……
最近遇到一个需求,我们要给客户定制一批指套检测设备(就是戴在指尖检测健康数据的那种),但是每个客户的手指尺码都不一样啊,怎么办呢?那就需要让用户自己用身边的工具测量一下自己的指尖周长值
比如这个用户的周长是49mm。
事情到这里挺顺利的,然后我通过周长计算一下得到一个圆,然后根据这个圆作为内径就可以做出产品啦。我们就根据这样的逻辑做了一小批产品,结果产品出来之后发现:统统都小了……
哪里出错了呢?明明都是按照实际尺寸做的呀。后来发现自己犯了一个低级错误:
产品是戴在指尖的,但是你的指尖不是圆的是一个椭圆形。
那么问题就来了:如何根据用户提供的椭圆形周长,来画出椭圆呢?
冷静分析一下:
- 已知用户的内径。
- 已知是椭圆,但不知道椭圆的其中一个值(长或宽)
- 需要一个椭圆周长的算法
- 单纯根据周长计算椭圆不现实,因为会得到无限的可能,至少要知道长和宽的信息(其中一条)
作为一个产品经理 + 设计师 + 前端开发 难道真的要用户测量一个手指的厚度或者宽度给我么?用户又没有卡尺,这样做让本来简单的事情变得复杂了很多,并且用户也可能测量的不够准确。那怎么办?
有些人呢,可能胖一点,就更像圆形,有些人呢瘦一点就更扁一点。对了,我们有用户的BMI(身高体重比)信息,这个信息从一个侧面可以反映用户的胖瘦情况。然后根据用户的胖瘦情况总结一个椭圆形的长宽比,这样不就可以了么。
现在题目就变成了这样:设A用户指尖周长是49mm,椭圆长宽比是1:1.1,求椭圆的长宽半径?
”不学无术“的我终于流下了学渣的眼泪啊……
在百度上试了各种求解方案无果之后,终于在维基百科找到了一些答案:
看到天才拉马努金的公式了么?当然在此之前,我完全不知道他是谁啊。
通过这个简单的公式,就可以求出椭圆的周长了,当然也可以根据周长来反求出长宽。在同事的帮助下得到了一个反求的公式:
作为半个前端的我,先用js实现了一下:
浏览器里面打开控制台粘贴即可执行。比如这样:`yuan(10,20)`,a和b代表的是椭圆长宽值。
然后根据上面反向推导的公式得到的代码如下:
这个公式就是最终答案啦,C代表椭圆周长,K代表比例。你可以这样用:
yuan(48,1.1)
有了这个公式和代码,后面的事情就简单多了,我们需要实现产品设计的”工具化“,因为最终是把用户的数据提供给工厂,让工厂去生产的,所以最后一步就是需要把设计结果工具化:
查阅了一下Rhino的绘图API,然后写的一个简单的工具条,实现输入椭圆的直径和比例,绘制出椭圆的功能。把这个小插件发给工厂,那边的伙计们就可以简单的实现以上需求啦。
(这个小工具是开源的,如果有同样需求的可以直接私信找我要)
作为一个设计工作的小插曲,可见在这个过程中,最重要的贡献是拉马努金先生提供的这个简单又好用的公式,后来仔细阅读了他的生平简介,包括那部他的电影《知无涯者》。
来知乎一看,很多人真的没有了解过他,就直接批判他是”民科“了。真让人唏嘘又惋惜,毕竟不是谁都可以成为剑桥三一学院的研究员的。
不管别人怎么想吧,我在这里要郑重的感谢一下,天才拉马努金先生!
问题评论区:
其实有个更简单的方法,因为长短半周比例固定,所有这样的椭圆都是相似的。所以只需要离线算出长轴为1时的椭圆周长,这是一个固定的值,再按比例缩放到目标周长即可。
2020-09-05
idken(作者)
是的,这样做就更简单了,可惜当时没想到,只好来硬的了
2020-09-09