【Re:PhiEdit / RPE】 曲線軌跡教程 ·【三】切線與螺旋線
# 在這里做一個(gè)關(guān)于父線芝士的預(yù)告!這篇寫完之后我會(huì)對(duì)父線進(jìn)行講解!
【切線】
整了這么些軌跡,有同學(xué)可能會(huì)發(fā)現(xiàn),我們不只是希望判定線的錨點(diǎn)能夠沿曲線軌跡運(yùn)動(dòng),我們還希望判定線可以沿切線方向貼合曲線運(yùn)動(dòng)。
但是這玩意挺復(fù)雜的()
對(duì)于一般的圓弧或者是圓,這個(gè)問題還好解決。這里提供常規(guī)解法:
你可以將整個(gè)軌跡的圓心標(biāo)注出來,將圓弧的起點(diǎn)與終點(diǎn)和圓心相連,如圖。


然后,我們作出它的切線。我們令B為起點(diǎn),C為終點(diǎn),那么我們可以得到??與?
?水平方向的夾角 α 與 β ,如上圖。接下來我們添加一個(gè)rotate事件,使其開始值為 α ,結(jié)束值為 β,使用與運(yùn)動(dòng)軌跡相同的緩動(dòng),即可完成切線的制作,如下圖。
(方程:400*cos(0.5*Pi*$t$+0.25*Pi)、400*sin(0.5*Pi*$t$+0.25*Pi),分別使用緩動(dòng)1與2)


對(duì)于復(fù)雜軌跡的切線,你有三個(gè)選擇:
第一個(gè),對(duì)軌跡導(dǎo)后微元,丟進(jìn)反三角函數(shù)求角度,再切rotate事件手動(dòng)填數(shù)據(jù)。這個(gè)方法很復(fù)雜而且仍然有局限性,本教程不作闡述。
第二個(gè),使用仍在內(nèi)測(cè)中的的切線生成功能。
第三個(gè),開擺(x)

【螺旋線】
螺旋線同樣是一個(gè)很常用的東西,它有兩種實(shí)現(xiàn)方法。第一種是使用多個(gè)半圓進(jìn)行拼接,第二種是直接修改參數(shù)方程。在此我會(huì)以第二種方法為主(第一種應(yīng)該很好想到罷())。
當(dāng)你只需要?jiǎng)蛩俾菪龝r(shí),第一種方法可以適用,但是對(duì)于整體變速的螺旋運(yùn)動(dòng),半圓拼接會(huì)變得不方便。
想象一下,螺旋線可以理解為一個(gè)點(diǎn)沿著一個(gè)半徑不斷縮小的“圓”運(yùn)動(dòng),如圖。

那這就好辦了,我們可以直接在原本的x y方程的基礎(chǔ)上乘一個(gè)系數(shù) (1-$t$),使得這個(gè)圓的“半徑”——A(A sin(ωx+φ)+b)不斷縮小。
而且,這個(gè)系數(shù)不僅可以是(1-$t$),還可以是 (1-sin($t$))、(1-$t$^2) 等系數(shù),這可以使這個(gè)圓的半徑以不同的緩動(dòng)縮小。下圖是上述三個(gè)系數(shù)的對(duì)比。



非常令人高興的是,由于這些軌跡都是同一個(gè)圓的半徑不斷縮小產(chǎn)生的,這些軌跡的切線寫法與普通的圓是一致的!也就是說,它的切線所使用的緩動(dòng)和上文的圓一樣,同樣只取決于x/y側(cè)的時(shí)間緩動(dòng),與你選用的半徑縮小的參數(shù)(1-$t$、1-sin($t$)、1-$t$^2)無關(guān)。
如圖,以1-sin($t$)為例。上圖中1-sin($t$)的結(jié)束軌跡稍微有點(diǎn)渲染問題,實(shí)際上其切線角度是0°。


好了,快去試試吧!
本教程中的動(dòng)圖與圖片均為我使用 Desmos 和 GeoGebra 制作。
當(dāng)然也包括 Re:PhiEdit 。