我需要绘制一个对角螺线(或近似逼近),其顶点之间的距离相等,以使任意两个连续顶点之间的线的长度相等。

(实际上,该螺线只是稍微复杂一点,但是等间距的增量现在才很重要。)

螺旋的基础是
$$ r = e ^ {0.25 \ theta} $$
其中$ r $是半径,而$ \ theta $是与$ x $轴的夹角。

因此很容易以给定角度绕过螺旋线,但是显然实际长度两个顶点之间的任何一条线(由角度$ \ Delta \ theta $定义)的变化都会随半径而变化。

我如何沿着螺旋线的弧线移动一段设定的长度(例如0.1美元) $任意单位)并获得正确的坐标(极坐标或笛卡尔坐标)?

评论

是否需要快速进行还是可以提前离线完成?

不需要特别快。

这些段是否需要完全相等的长度(在浮点数等的限制内),或者它们可以近似相等?像在一个epsilon中相等吗?

有趣的一点。一些近似值可能还可以,但我宁愿最大化精度。

您是否想要等长的线段或代表相等弧长的线段?

#1 楼

由于对数螺旋由

$ r = e ^ {a \ cdot \ theta} $定义,因此

方程的逆是这样的:

$ \ theta = \ frac {\ ln {r}} {a} $。

如果我们希望能够控制步长值,可以将其乘以标量($ a \ cdot k $),然后取对数,如下所示:

$ \ theta = \ frac {\ ln(ak \ cdot r)} {a} $

因此,如果我们将theta的自然对数乘以标量和$ a $,然后将整个事物除以$ a $,然后再将其插入方程中,我们将在对数螺旋上得到等阶的顶点。图片:



我使用一些JavaScript代码生成了该代码,您可以在此JSFiddle中找到这些代码。

还可以交互地进行尝试。在Desmos上。


最初看起来不错,但让我们更深入地分析这里发生的事情。

以下是每对连续点之间的距离的列表,从原点开始并向外螺旋:

20.6834877876017
25.8265879847751
27.3020264943519
27.9155365639631
28.2274404549991
28.4072329605331
28.5201842104742
28.5957343926866
28.6487385499231
28.6873487186944
28.7163404861061
28.7386617798632
28.7562121095165
28.7702600892245
28.7816791255158
28.7910864406300
28.7989282185451
28.8055334775293
28.8111491387549
28.8159634339811
28.8201218817722
28.8237384111142
28.8269032465565
28.8296885891879
28.8321527704665
28.8343433306399
28.8362993285731
28.8380530946981
28.8396315754034
28.8410573741728
28.8423495651939
28.8435243345428
28.8445954894748
28.8455748659368
28.8464726569062
28.8472976786488
28.8480575879711
28.8487590604974
28.8494079377702
28.8500093492502
28.8505678139929
28.8510873257846
28.8515714247378
28.8520232577561
28.8524456298024
28.8528410475339
28.8532117565801
28.8535597734869
28.8538869132081
28.8541948128041
28.8544849519687
28.8547586708355
28.8550171854833
28.8552616014621
28.8554929256347
28.8557120765606
28.8559198936319
28.8561171451194
28.8563045352784
28.8564827106597
28.8566522656712
28.8568137475608
28.8569676608282
28.8571144711722
28.8572546090145
28.8573884726640
28.8575164311457
28.8576388267439
28.8577559773038
28.8578681782850
28.8579757046362
28.8580788124715
28.8581777406078
28.8582727119331
28.8583639346897
28.8584516035825
28.8585359008445
28.8586169971792
28.8586950526148
28.8587702173116
28.8588426322609
28.8589124299770
28.8589797350751
28.8590446648521
28.8591073297703
28.8591678339633
28.8592262756316
28.8592827474659
28.8593373370150
28.8593901270040
28.8594411956751
28.8594906170532
28.8595384612331
28.8595847946223
28.8596296801627
28.8596731775581
28.8597153434631
28.8597562316691
28.8597958932898
28.8598343768895
28.8598717286685
28.8599079925824
28.8599432104601
28.8599774221564
28.8600106656362
28.8600429770912
28.8600743910437
28.8601049404189
28.8601346566671
28.8601635697958
28.8601917084984
28.8602191001836
28.8602457710551
28.8602717461905
28.8602970495771
28.8603217041829
28.8603457319945
28.8603691540817
28.8603919906349
28.8604142610140
28.8604359837728
28.8604571767236
28.8604778569632
28.8604980408853
28.8605177442508
28.860536982199 
28.8605557692684
28.8605741194424
28.8605920461606
28.8606095623542
28.8606266804642
28.8606434124606
28.8606597698673
28.8606757637894
28.8606914049092
28.8607067035307
28.8607216695845
28.8607363126319
28.8607506419126
28.8607646663229
28.8607783944441
28.8607918345695
28.8608049947040
28.8608178825589
28.8608305056052
28.8608428710407
28.8608549858324
28.8608668567086
28.8608784901671
28.8608898925065
28.8609010698021
28.8609120279379
28.8609227726126
28.8609333093227
28.8609436434116
28.8609537800355
28.8609637242006
28.8609734807368
28.8609830543426
28.8609924495660
28.8610016707985
28.8610107223272
28.8610196082769
28.8610283326623
28.8610368993920
28.8610453122201
28.8610535748236
28.8610616907611
28.8610696634759
28.8610774963191
28.8610851925415
28.8610927553168
28.8611001876897
28.8611074926601
28.8611146731067
28.8611217318631
28.8611286716494
28.8611354951266
28.8611422048820
28.8611488034280
28.8611552932030
28.8611616766001
28.8611679559112
28.8611741333984
28.8611802112609
28.8611861916049
28.8611920765250
28.8611978680366
28.8612035681006
28.8612091786388
28.8612147015119
28.8612201385397
28.8612254914896
28.8612307620868
28.8612359520116
28.8612410629093
28.8612460963629
28.8612510539384
28.8612559371502


第一个数据点是由螺旋几乎“重叠”自身引起的异常值。随着螺旋运动的进行,我们可以看到距离越来越接近相同的距离。

这是因为我们对曲线进行增量采样,导致沿曲线的长度相等,而不是连续点之间的长度相等。随着螺旋线越来越大,曲线将越来越浅,因此距离也越来越近。

评论


$ \ begingroup $
话虽这么说,但这种方法确实意味着a的值会影响线长和转弯率。我真的需要将它们分开。
$ \ endgroup $
–太阳能造粒
17-10-17在11:01



$ \ begingroup $
@SolarGranulation我刚刚添加了它,并更新了JSFiddle和Desmos示例以反映这一点。
$ \ endgroup $
–斯科特·米尔纳(Scott Milner)
17-10-18在0:10