python處理滑塊驗(yàn)證的軌跡計(jì)算問題

滑塊驗(yàn)證核心是后臺(tái)驗(yàn)證軌跡參數(shù),效驗(yàn)軌跡取點(diǎn)的分布,正常情況是如下圖的離散分布


image

如果橫坐標(biāo)x是時(shí)間、縱坐標(biāo)y是位移,那么每個(gè)點(diǎn)的切線就是加速度,會(huì)發(fā)現(xiàn)這樣的一個(gè)規(guī)律,加速度由小變大,再又大變小,這是最主要的特征之一。

速度的變化率如下:


image

對(duì)速度而言肯定是先加速在減速,但加速度不會(huì)是固定的,應(yīng)該是變變加速和變變加速,不過目前實(shí)際應(yīng)用中的情況來說,是以速度變化情況為主要判別依據(jù),因?yàn)樵谝院慵訙p速度生成的軌跡應(yīng)用中一樣可以通過檢測(cè),就說明目前沒有對(duì)是否恒定加速度來鑒別機(jī)器和人工。

知道上面的兩點(diǎn)后我們就應(yīng)該明白滑塊驗(yàn)證的關(guān)鍵,并且可以預(yù)測(cè)它的下一步優(yōu)化方式將是對(duì)加速度變化的驗(yàn)證,收集了兩種軌跡生成方式:一種是以加減速為主的物理學(xué)生成方式,另一種是根據(jù)軌跡離散分布生成的數(shù)學(xué)生成。

def generate_tracks(S):

    """

    :param S: 缺口距離Px

    :return: 

    """

    S += 20

    v = 0

    t = 0.2

    forward_tracks = []

    current = 0

    mid = S * 3 / 5  # 減速閥值

    while current < S:

        if current < mid:

            a = 2  # 加速度為+2

        else:

            a = -3  # 加速度-3

        s = v * t + 0.5 * a * (t ** 2)

        v = v + a * t

        current += s

        forward_tracks.append(round(s))


    back_tracks = [-3, -3, -2, -2, -2, -2, -2, -1, -1, -1]

    return {'forward_tracks': forward_tracks, 'back_tracks': back_tracks}

傳入距離S,先加上20的距離然后在生成軌跡中再減去20,達(dá)到超過缺口在回滑的效果,以固定周期0.2秒來計(jì)算軌跡和速度。

def ease_out_quad(x):

    return 1 - (1 - x) * (1 - x)


def ease_out_quart(x):

    return 1 - pow(1 - x, 4)


def ease_out_expo(x):

    if x == 1:

        return 1

    else:

        return 1 - pow(2, -10 * x)


def get_tracks(distance, seconds, ease_func):

    tracks = [0]

    offsets = [0]

    for t in np.arange(0.0, seconds, 0.1):

        ease = globals()[ease_func]

        offset = round(ease(t/seconds) * distance)

        tracks.append(offset - offsets[-1])

        offsets.append(offset)

    return offsets, tracks

這種方式是從時(shí)間出發(fā),在假設(shè)勻速的情況下,把時(shí)間分割成一段一段的,每段都對(duì)應(yīng)一個(gè)軌跡,那么這個(gè)軌跡先大后小如下:

[0, 0.0, 21.0, 16.0, 13.0, 10.0, 9.0, 6.0, 5.0, 4.0, 4.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0]
目前這兩種軌跡都是可行的,能夠通過騰訊的滑塊驗(yàn)證。

轉(zhuǎn)載自https://yq.aliyun.com/articles/693344

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容