为什么耳机线绕 8 字可以减少打结?

http://www.guokr.com/article/438749/
See 13 & 16L
但是为什么?

推荐  (2) | 17人关注关注
11个答案
53 6

方程应用数学专业

2014-07-17 21:10

在这里非常高兴地告诉楼主:

其实卷成这个样可以更具形态稳定性。
保证到外面跑步仰卧起坐深蹲脱裤子游泳然后去商店蹭iPad玩再去吃顿午饭后拿出来一看,还是这个圈圈的形状。

这让我有这么一个猜想:
在近似二维平面的裤子口袋里,耳机线其实不会发生很大的形变。
「不会大规模形变」意思就是人放进去它什么样,拿出来它就差不多是什么样。
那,为何还是会有些耳机线会乱七八糟的呢?
——因为它们放进去的时候就是乱的!

好吧,现在说说我的模型。

——————————————
我思路是这样的:
将耳机线视为一截平面上的定长光滑曲线(口袋里空间狭窄,视为二维)。
其形状的参数方程

其中x(t)、y(t)是任意函数,但它们需要满足条件(※):x(t)、y(t)都在整段区间(a,b)内有连续导函数,且有

而其形态变化在人活动的过程中,是一个布朗运动
整个步骤会迭代若干次;每一次迭代都会在曲线上随机取点,然后给予这些个点一些微小的偏移(即视这些点视为裤子口袋的摩擦运动受力点),然后按这些点的取样顺序重新拟合一条曲线——新得到的曲线要求符合条件(※)。
一直得到适当次的迭代后,就可以分析初始曲线与最后曲线的形态差异了。

思路就是这样。

——————————————
实际写代码时,经历了好一番挣扎,也有到贴吧提问,还是找不到非常合适的方法。

只好在现实与模型之间作了一点妥协 (理想假设):

  1. 不视耳机绳为任意的光滑曲线,而是用任意的Bessel曲线取代;
  2. Bessel曲线的生成点 (它们落在曲线上) 视为受力点;
  3. 每一次迭代施力时,受力点都相同;
  4. 对所有点的施力效果都一样 (都是给定范围的随机波动);
  5. 施力过程是离散的,也即一整批一整批地改变点的位置,而非持续不断地施力改变点的位置;


很不靠谱的假设,对吧?咳咳,反正,姑且承认它们就行了。为了方便嘛。

7月24日,终于乘空完成了代码
我这是有多闲啊……


以下是Mathematica的作图与计算代码

——————————————
(*绘制Bessel曲线的函数*)
bessel[array_, t_] :=
Module[{result, length, parameter, varl}, result = 0;
length = Length[array] - 1;
If[t == 0, result = array[1],
If[t == 1, result = array[-1],
For[var1 = 0, var1 <= length, var1++,
result =
result +
length!/(var1!*(length - var1)!)*
t^var1*(1 - t)^(length - var1)*array[var1 + 1];];];];
result];

(*r 是点集的取值范围*)
r = 10;
(*n 是点集中点的数量*)
n = 20;
(*p 是中途步骤施力拨动曲线的幅度*)
p = 5;
(*m 是施力的次数*)
m = 10;

(*生成曲线的点集*)
initarray = Table[{r - 2 r RandomReal[], r - 2 r RandomReal[]}, {i, 1, n}];

(*从点集中提取横坐标集和纵坐标集*)
setpara[arr_] :=
Module[{var1, array, arrx, arry}, array = Flatten[arr];
arrx = {};
arry = {};
For[var1 = 1, var1 <= Length[array]/2, var1 += 1,
arrx = Append[arrx, array[2 var1 - 1]];
arry = Append[arry, array[2 var1]];];
{arrx, arry}];

(*用参数方程画出初始状态的Bessel曲线*)
initarrx = setpara[initarray][1];
initarry = setpara[initarray][2];
StringJoin["The initial Bessel curve is set by:", ToString[initarray]
initimg =
ParametricPlot[{bessel[initarrx, t], bessel[initarry, t]}, {t, 0,
1}];
initzoom1 =
Total[EuclideanDistance @@@
Partition[First@Cases[Normal@initimg, Line[a_] :> a, Infinity], 2,
1];
newinitimg =
ParametricPlot[{bessel[initarrx, t]/initzoom1,
bessel[initarry, t]/initzoom1}, {t, 0, 1}]
initlist =
Table[{bessel[initarrx, t]/initzoom1,
bessel[initarry, t]/initzoom1}, {t, 0, 1, 0.02}];
initlength =
Total[EuclideanDistance @@@
Partition[First@Cases[Normal@newinitimg, Line[a_] :> a, Infinity],
2, 1];
StringJoin["Its length is: ", ToString[initlength]

(*迭代,m次移动点集中的点,作类布朗运动*)

finalarray = Flatten[initarray];
l = Length[finalarray];
For[w = 1, w <= m,
w++, {For[d = 1, d <= 5, d++, id = RandomInteger[Floor[l/2] - 1];
finalarray[2 id + 1] += (p - 2 p RandomReal[]);
finalarray[2 id + 2] += (p - 2 p RandomReal[]);
Clear[id];]}]
finalarray = Partition[finalarray, 2];

(*画出终末状态的Bessel曲线*)
finalarrx = setpara[finalarray][1];
finalarry = setpara[finalarray][2];
StringJoin["The latest Bessel curve is set by:", ToString[finalarray]
finalimg1 =
ParametricPlot[{bessel[finalarrx, t], bessel[finalarry, t]}, {t, 0,
1}];
finalzoom1 =
Total[EuclideanDistance @@@
Partition[First@Cases[Normal@finalimg1, Line[a_] :> a, Infinity],
2, 1];
newfinalimg =
ParametricPlot[{bessel[finalarrx, t]/finalzoom1,
bessel[finalarry, t]/finalzoom1}, {t, 0, 1}]
finallist =
Table[{bessel[finalarrx, t]/finalzoom1,
bessel[finalarry, t]/finalzoom1}, {t, 0, 1, 0.02}];
finallength =
Total[EuclideanDistance @@@
Partition[
First@Cases[Normal@newfinalimg, Line[a_] :> a, Infinity], 2, 1];
StringJoin["Its length is: ", ToString[finallength]

(*对点集作统计分析,计算前后的相关系数*)
CorrelationTest[initlist, finallist, {"TestDataTable", All}]

——————————————
上面的代码是可以放在Mathematica里运行的。
我只贴出其中三次运行的结果。
========================
点集取值范围 10
点的数目 20
拨动的幅度 10
拨动的次数 20

Spearman指数是 -0.0753846
其P值是 0.0595879
========================
点集取值范围 10
点的数目 20
拨动的幅度 5
拨动的次数 20


Spearman指数是 -0.260452
其P值是 0.21457
========================
点集取值范围 10
点的数目 20
拨动的幅度 10
拨动的次数 10

Spearman指数是 -0.0714027
其P值是 0.572712

但……抱歉得很,我没学过统计学,所以不知道如何测评这个结果。

不过,粗略地看结果,可以知道本模型的一个很粗糙的结论:
若施力次数和施力强度限制在某个范围内,绳子的形态会保持稳定。
——那不是废话吗!!
是的,其实大部分数学模型的定性结论听起来都是废话。
而「不是废话」的结论,还需要作定量分析。但我不继续了,因为那需要继续给代码不断添料。

——————————————
一开始我只是心血来潮地写点回答而已;最后居然写了这么多……这个作业,就到这儿吧。虽然结果不完美,但应该不会再更新本回答了……谢谢诸位的阅读。

——————————————
对了,也许有同学不知道Bessel曲线是什么。
玩过Photoshop的同学一定用过它的啦。关于它的作图方法,很多地方都有介绍。
这给一个帖子,是一个不错的科普:
http://bbs.csdn.net/topics/390358020

20 6

死理性派们,你们太过了,这点事还要建模。。。。你让不懂模型的人怎么活

2 0

饭小盆材料物理学士,飞面神教信徒,FFF团资深团员

2014-07-10 18:00

我看了那个图片。。根据链接中给出的结论么。。我个人有如下猜测
1:文章指出绳结数量是有上限的。。。从7到11个不等。。。图片中的绕法已经提供了足够多的绳结。。而这个结是我们设计好的,易于解开的。。
2:绳子越短越不容易打结,图中的过程可以看做是将整段绳子分割为若干个很短的部分。。。

1 0
支持者: 铁沫子

不是说系统趋向于能量最小的状态,8字和1楼的圆环说不定是个稳定解呢??
记得以前看过这个帖子

0 0

虽然是减少打结,但是耳机先也会因为弯曲得太厉害了。一般是用1L那种办法比较靠谱。

0 0

我收登山绳也是绕8字的,不会打结~

0 0

因为8字节是没有扭矩的
水手把缆绳盘起或者户外运动登山绳收起都建议使用8字节

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 家长监控 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2018] 6282-492号    新出发京零字第朝200003号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区