org\Verify::_writeCurve PHP Метод

_writeCurve() приватный Метод

高中的数学公式咋都忘了涅,写出来 正弦型函数解析式:y=Asin(ωx+φ)+b 各常数值对函数图像的影响: A:决定峰值(即纵向拉伸压缩的倍数) b:表示波形在Y轴的位置关系或纵向移动距离(上加下减) φ:决定波形与X轴位置关系或横向移动距离(左加右减) ω:决定周期(最小正周期T=2π/∣ω∣)
private _writeCurve ( )
    private function _writeCurve()
    {
        $px = $py = 0;
        // 曲线前部分
        $A = mt_rand(1, $this->imageH / 2);
        // 振幅
        $b = mt_rand(-$this->imageH / 4, $this->imageH / 4);
        // Y轴方向偏移量
        $f = mt_rand(-$this->imageH / 4, $this->imageH / 4);
        // X轴方向偏移量
        $T = mt_rand($this->imageH, $this->imageW * 2);
        // 周期
        $w = 2 * M_PI / $T;
        $px1 = 0;
        // 曲线横坐标起始位置
        $px2 = mt_rand($this->imageW / 2, $this->imageW * 0.8);
        // 曲线横坐标结束位置
        for ($px = $px1; $px <= $px2; $px = $px + 1) {
            if (0 != $w) {
                $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2;
                // y = Asin(ωx+φ) + b
                $i = (int) ($this->fontSize / 5);
                while ($i > 0) {
                    imagesetpixel($this->_image, $px + $i, $py + $i, $this->_color);
                    // 这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好很多
                    $i--;
                }
            }
        }
        // 曲线后部分
        $A = mt_rand(1, $this->imageH / 2);
        // 振幅
        $f = mt_rand(-$this->imageH / 4, $this->imageH / 4);
        // X轴方向偏移量
        $T = mt_rand($this->imageH, $this->imageW * 2);
        // 周期
        $w = 2 * M_PI / $T;
        $b = $py - $A * sin($w * $px + $f) - $this->imageH / 2;
        $px1 = $px2;
        $px2 = $this->imageW;
        for ($px = $px1; $px <= $px2; $px = $px + 1) {
            if (0 != $w) {
                $py = $A * sin($w * $px + $f) + $b + $this->imageH / 2;
                // y = Asin(ωx+φ) + b
                $i = (int) ($this->fontSize / 5);
                while ($i > 0) {
                    imagesetpixel($this->_image, $px + $i, $py + $i, $this->_color);
                    $i--;
                }
            }
        }
    }