注册 登录
发贴工具
查看: 77|回复: 0
打印 上一主题 下一主题

[24小时收录超级好的网站] 深度解析贝塞尔曲线的计算过程与优化策略

[复制链接]

2216

主题

2264

帖子

1万

积分

积分
13500
跳转到指定楼层
楼主
 随机数生成函数
function random(a, b) {
    return rand.randNumber(a, b);
}

/**
 * @param time_ms {number} 执行时间 ms 例如 3000
 * @param t {number} 间隔系数 0-1 间, 越小线条线条越圆润,计算量越大, 例如 0.005
 * @param pt {number[][]} 控制点坐标的二维数组 例如 [[137,169],[140,283]]
 */
function bezier(time_ms, t, pt) {
    var gesture1 = new path(); // 创建一个手势对象
    gesture1.setStarTime(10); // 开始前延时
    var fps = 1 / t;
    for (let i = 0; i <= fps; i++) {
        let copyArr = Array.from(pt, row => row.slice()); // 拷贝一份 js的数组是引用传递
        var xy = calculateBezier(i * t, copyArr);
        gesture1.addPoint(xy[0], xy[1]);
    }
    gesture1.setDurTime(time_ms); // 完成时间
    auto.dispatchGesture([gesture1]); // 执行手势操作
}

/**
 * @param t {number} 0 ~ 1的时间
 * @param point2Fs {number[][]} 贝塞尔点集合
 * @return {number[]} 返回当前时间下的贝塞尔点
 */
function calculateBezier(t, point2Fs) {
    let len = point2Fs.length;
    for (let i = len - 1; i > 0; i--) {
        for (let j = 0; j < i; j++) {
            point2Fs[j][0] = point2Fs[j][0] + (point2Fs[j + 1][0] - point2Fs[j][0]) * t;
            point2Fs[j][1] = point2Fs[j][1] + (point2Fs[j + 1][1] - point2Fs[j][1]) * t;
        }
    }

    return [parseInt(point2Fs[0][0]), parseInt(point2Fs[0][1])];
}

// 控制点
var CtrlPt1 = [
    [167, 625], // 起点1
    [200, 200],
    [500, 500],
    [300, 100]
];

var CtrlPt2 = [
    [309, 833], // 起点2
    [500, 700],
    [600, 600],
    [500, 300]
];

var CtrlPt3 = [
    [151, 892], // 起点3
    [300, 880], // 引入Y坐标的小变化
    [450, 895], // 引入Y坐标的小变化
    [600, 885]  // 引入Y坐标的小变化
];

// 执行贝塞尔手势
bezier(4000, 0.005, CtrlPt1);
bezier(4000, 0.005, CtrlPt2);
bezier(4000, 0.005, CtrlPt3);

bezier(time_ms, t, pt) 函数

深度解析贝塞尔曲线的计算过程与优化策略 群发软件发帖工具 深度解析贝塞尔曲线的计算过程与优化策略 群发软件发帖工具 深度解析贝塞尔曲线的计算过程与优化策略 群发软件发帖工具
深度解析贝塞尔曲线的计算过程与优化策略 群发软件发帖工具

这个函数用于生成并执行一个贝塞尔曲线手势。具体参数解释如下:

  1. time_ms

    • 作用:定义手势从开始到结束的总时间,单位是毫秒。
    • 示例bezier(4000, 0.005, CtrlPt1); 表示整个手势将在4000毫秒(4秒)内完成。
  2. t

    • 作用:定义间隔系数,用于控制贝塞尔曲线的计算精度和线条的圆润度。t 的取值范围是0到1之间。
    • 精度与圆润度:较小的 t 值意味着计算的间隔更小,生成的曲线更圆润,但计算量也会相应增加。较大的 t 值则表示计算间隔更大,曲线可能会显得更折线化,计算量较少。
    • 示例bezier(4000, 0.005, CtrlPt1); 中的 t 为0.005,表示每0.005的时间单位计算一次贝塞尔曲线上的点。
  3. pt

    • 作用:定义贝塞尔曲线的控制点坐标。控制点决定了贝塞尔曲线的形状。起点和终点是曲线的两端,而中间的控制点决定了曲线如何弯曲。
    • 格式pt 是一个二维数组,其中每个子数组包含两个数字,分别表示控制点的X坐标和Y坐标。
    • 示例
      • CtrlPt1 定义了起点 [167, 625],两个控制点 [200, 200] 和 [500, 500],以及终点 [300, 100]
      • CtrlPt2 定义了起点 [309, 833],两个控制点 [500, 700] 和 [600, 600],以及终点 [500, 300]
      • CtrlPt3 定义了起点 [151, 892],两个控制点 [300, 880] 和 [450, 895],以及终点 [600, 885]

calculateBezier(t, point2Fs) 函数

这个函数用于计算贝塞尔曲线在某个时间点 t 上的坐标。具体参数解释如下:

  1. t

    • 作用:表示时间参数,取值范围是0到1之间。t=0 对应曲线的起点,t=1 对应曲线的终点。
    • 计算过程:通过递归地插值计算,最终得到 t 时刻的曲线坐标。
  2. point2Fs

    • 作用:包含贝塞尔曲线的控制点坐标。
    • 格式:二维数组,每个子数组包含两个数字,分别表示控制点的X坐标和Y坐标。

计算贝塞尔曲线的详细过程

贝塞尔曲线的计算通常使用递归的插值方法。在 calculateBezier 函数中,具体步骤如下:

  1. 拷贝控制点数组

    • 由于 JavaScript 中数组是引用传递的,为了避免修改原始控制点数组,首先需要拷贝一份 point2Fs
  2. 递归插值计算

    • 对于每个控制点,通过线性插值计算新的点,直到只剩下一个点为止。
    • 具体公式为:point2Fs[j][0] = point2Fs[j][0] + (point2Fs[j + 1][0] - point2Fs[j][0]) * t;
      • 这里的 t 是当前时间参数,point2Fs[j][0] 和 point2Fs[j + 1][0] 是相邻控制点的X坐标。
      • 通过这个公式计算新的X坐标。
    • 同样地,计算新的Y坐标:point2Fs[j][1] = point2Fs[j][1] + (point2Fs[j + 1][1] - point2Fs[j][1]) * t;
  3. 返回结果

    • 最终,point2Fs[0] 将包含贝塞尔曲线在 t 时间点的坐标。
    • 返回这个坐标 [parseInt(point2Fs[0][0]), parseInt(point2Fs[0][1])],其中 parseInt 用于将坐标转换为整数。

执行贝塞尔手势

在 bezier 函数中,通过循环调用 calculateBezier 函数,生成从起点到终点的一系列点,并将这些点添加到 gesture1 对象中,最后通过 auto.dispatchGesture([gesture1]); 执行这个手势操作。


unto交互模块的开关控制next解锁 MuMu 模拟器 ADB 桥接模式,顺利对接 AIWROK 软件全攻略
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关导读了
    采集亚马逊正版群发工具有没有?
    Apr.20旅行X心语今天来说说YYPOST新功能的一个灵活用法,采集亚马逊商品信息,并且获得排名的软件,亚马逊现在越来越多客户做,淘宝的水是越来越清了,以前做电商的客户,现在都转战到外国,最赚钱的要数一些客户往亚马逊里堆了吧,拿我这个YYPOST的客户,最多的是采集,分析排名,刷价格,刷数量,改价,刷访问量等等技术

    企业发展B2B网站有什么东东软件可以发呢
    标题企业发展网B2B软件,现在虽然B2B网站收录不错,可愁的是心急的人们,他们太想一口吃撑胖子了,发帖宣传虽然不能像佛系那样淡定,但也不能像跑火车那般急躁对待,自己内容不收录,完全是自己操作内容问题,可以参考一下别人的内容是怎么弄的,然后自己要试着转变,而且收录这个内容,常常会变化的,不是一种规则就吃到老

    搜房天下房聊软件哪一个好呢
    本帖最后由 发帖软件 于 2019-5-22 16:15 编辑 2搜房天下群发房聊信息软件,开始本来打算做58同城的,但发一个就要一次点触验证码,这就让人没有感觉到存在的价值了吧,都是卖二手房和新房的搜房天下倒是可以发即时聊天信息,也没有发现他这个网站有啥子限制,登陆一个搜房天下账号,然后采集回来分类列表的网址,然后就一

    大家坛有没有好用的群发工具下载呢
    当你的笑容给我礼貌的招呼,大家坛全自动发帖软件,宣传推广是一场持久战,总是有一些人把软件用了一天,或是几个小时,就觉得自己付出太多了,那加进来的粉丝,或是流量,应该是和宣传多少成正比的,其实没有这么便宜的事,就像很多阅读量超过一百万的视频,或是电影,真正会在屏幕打赏的人不会超过三千,真正大额打赏给主

    群发正版软件中国塑料网
    中国塑料网群发软件YYPOST脚本下载地址,这个网站会有一个很奇怪的问题就是你在首页登陆无半个验证码,但在登陆网址登陆就会有一个验证码,所以我们灵活一些,在首页登陆就不用输入验证码了哈。网站秒收录比较高,但发的都是五金和建筑行业,先前有很多人都是发土建工程的大公司操作的,现在这个网站专为那个行业诞生的吧。

    OpenStreetMap网站正版2019年发帖工具下载
    本帖最后由 发帖软件 于 2019-5-21 11:13 编辑 OpenStreetMap网站全自动群发,OpenStreetMapOpenStreetMap(简称OSM,中文是公开地图)是一个网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图。有的人编辑地图然后等收录,有的人发日志等收录,我们这里也是利用地图日志做为宣传的目标,简单的脚本理

    搜房天下全自动收短信全自动识别验证码注册账号软件
    房天下自动注册机,这个脚本是前几天发房聊的脚本廷伸品种,这个脚本能做到自动注册账号,自动保存账号,自动发房聊的效果,不过今天我们主要说一说怎么注册账号写脚本吧,这个搜房天天下的账号,可以发提问,可以发房聊,发论坛,发博客,还有发个人中心页都是有秒收的效果的,这样就省去了去买号,去乱花钱的效果了吧,而

    企业邮箱安卓端有什么APP软件可以发的呢
    请输入标题企业邮箱安卓发发送邮箱脚本,这个脚本是利用企业邮箱进行群发的,全程是一种模拟手工操作的过程,所以封号是很少的,而且企业邮箱群发到普通QQ邮箱不容易进垃圾箱中的,所以这个脚本也是这样的原理,不过最好是利用一些多开器,登陆多点的QQ邮箱账号会比较流畅一些,然后用软件一个一个的切换APP进行群发邮件会

    头条留评论软件有没有好用的呢?
    今天整一个今日头条留言软件,对于留言YYPOST是优势是比较大的存在,因为他往往专注一些下拉定位的优点,像今日头条这样,还是需要一些特殊下拉定位的,因为他新闻有长有短,有图有视频的,所以综合起来定位是比较难的,如果用POST也不是很轻松可以破解他的加密参数。这个脚本也是有一个不好的地方就是换号会比较麻烦,您电

    单网页生成神器
    最近新技术,网页生成机占领了整个网络的半壁江山,效果很疯狂,虽然不知道能持续多久,作为开发软件的领头者,一直在找收录的方法,一直在努力创新着,一直被人模仿,却从没有被超越过,这个网页生成机,已经出来有一段时间了,一直没有拿出来分享,醉过醉过,它是利用的一些小小收录漏洞整的,您最好用一些老站域名,进行

关闭
快速回复 返回列表 返回顶部
本站自动发贴软件,是现在最流行的做脚本软件,这种发贴工具,不但发贴收录快,而且抢占好的先机,完全自由编辑,实现针对性群发模拟操作,软件可以顶贴,也可以发贴,可以兼容支持Discuz、PHPWind、Dvbbs三大主流论坛,有手机验证码收件,邮件收发的功能,支持验证码识别,注册问题识别,多线程任务,自动上传头像,自动激活注册邮件,兼容防注册插件,本站软件原创正版,更新效率最快的原创软件。 『网络推广软件』『自动发帖软件』『 自动发帖