自动发帖软件

标题: HID贝塞尔曲线运动控制器 [打印本页]

作者: 发帖软件    时间: 4 小时前
标题: HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器 群发软件发帖工具

HID贝塞尔曲线运动控制器 群发软件发帖工具

  1. /**
  2. * HID贝塞尔曲线运动控制器
  3. * 基于AIWROK平台的高级滑动自动化工具
  4. * 支持多种贝塞尔曲线类型和HID设备控制
  5. */

  6. // HID贝塞尔曲线运动管理器类
  7. class HIDBezierCurveMover {
  8.     /**
  9.      * 构造函数
  10.      * @param {Object} config - 配置参数
  11.      */
  12.     constructor(config = {}) {
  13.         this.duration = config.duration || 2000; // 默认2秒
  14.         this.steps = config.steps || 100; // 默认100步
  15.         this.press = config.press || 50; // 按压参数
  16.         this.delayUp = config.delayUp || 50; // 延迟抬起时间
  17.         
  18.         // 获取屏幕尺寸
  19.         this.screenWidth = screen.getScreenWidth();
  20.         this.screenHeight = screen.getScreenHeight();
  21.         
  22.         printl(`[HID贝塞尔曲线运动管理器] 初始化完成`);
  23.         printl(`屏幕尺寸: ${this.screenWidth} x ${this.screenHeight}`);
  24.     }
  25.    
  26.     /**
  27.      * 检查HID设备状态
  28.      * @returns {boolean} HID是否可用
  29.      */
  30.     checkHIDStatus() {
  31.         try {
  32.             // 尝试执行一个简单的HID操作来检测可用性
  33.             // 使用try-catch捕获任何HID相关错误
  34.             if (typeof hid === 'undefined' || hid === null) {
  35.                 printl("错误: HID对象未定义");
  36.                 return false;
  37.             }
  38.             
  39.             // 检查是否存在基本的HID滑动方法
  40.             if (typeof hid.swip !== 'function') {
  41.                 printl("错误: HID滑动方法不可用");
  42.                 return false;
  43.             }
  44.             
  45.             printl("HID设备检查通过,可以正常使用");
  46.             return true;
  47.         } catch (e) {
  48.             printl("检查HID状态时出错: " + e.message);
  49.             return false;
  50.         }
  51.     }
  52.    
  53.     /**
  54.      * 计算线性插值
  55.      * @param {number} t - 参数t (0-1)
  56.      * @param {number} p0 - 起始值
  57.      * @param {number} p1 - 结束值
  58.      * @returns {number} 插值结果
  59.      */
  60.     lerp(t, p0, p1) {
  61.         return p0 + t * (p1 - p0);
  62.     }
  63.    
  64.     /**
  65.      * 计算二次贝塞尔曲线点
  66.      * @param {number} t - 参数t (0-1)
  67.      * @param {number} p0 - 起始点
  68.      * @param {number} p1 - 控制点
  69.      * @param {number} p2 - 结束点
  70.      * @returns {number} 曲线上的点
  71.      */
  72.     quadraticBezierPoint(t, p0, p1, p2) {
  73.         var t1 = 1 - t;
  74.         return t1 * t1 * p0 + 2 * t1 * t * p1 + t * t * p2;
  75.     }
  76.    
  77.     /**
  78.      * 计算三次贝塞尔曲线点
  79.      * @param {number} t - 参数t (0-1)
  80.      * @param {number} p0 - 起始点
  81.      * @param {number} p1 - 控制点1
  82.      * @param {number} p2 - 控制点2
  83.      * @param {number} p3 - 结束点
  84.      * @returns {number} 曲线上的点
  85.      */
  86.     cubicBezierPoint(t, p0, p1, p2, p3) {
  87.         var t1 = 1 - t;
  88.         return t1 * t1 * t1 * p0 + 3 * t1 * t1 * t * p1 + 3 * t1 * t * t * p2 + t * t * t * p3;
  89.     }
  90.    
  91.     /**
  92.      * 执行线性滑动
  93.      * @param {number} startX - 起始X坐标
  94.      * @param {number} startY - 起始Y坐标
  95.      * @param {number} endX - 结束X坐标
  96.      * @param {number} endY - 结束Y坐标
  97.      */
  98.     executeLinearSlide(startX, startY, endX, endY) {
  99.         printl(`[线性滑动] 从(${startX}, ${startY}) 到 (${endX}, ${endY})`);
  100.         
  101.         try {
  102.             var result = hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
  103.             printl(`[线性滑动] 执行结果: ${result}`);
  104.             return true;
  105.         } catch (e) {
  106.             printl(`[线性滑动] 执行失败: ${e.message}`);
  107.             return false;
  108.         }
  109.     }
  110.    
  111.     /**
  112.      * 执行二次贝塞尔曲线滑动
  113.      * @param {number} startX - 起始X坐标
  114.      * @param {number} startY - 起始Y坐标
  115.      * @param {number} controlX - 控制点X坐标
  116.      * @param {number} controlY - 控制点Y坐标
  117.      * @param {number} endX - 结束X坐标
  118.      * @param {number} endY - 结束Y坐标
  119.      */
  120.     executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY) {
  121.         printl(`[二次贝塞尔曲线] 起点(${startX}, ${startY}), 控制点(${controlX}, ${controlY}), 终点(${endX}, ${endY})`);
  122.         
  123.         try {
  124.             // 计算曲线上的点
  125.             var stepDuration = this.duration / this.steps;
  126.             var points = [];
  127.             
  128.             for (var i = 0; i <= this.steps; i++) {
  129.                 var t = i / this.steps;
  130.                 var x = this.quadraticBezierPoint(t, startX, controlX, endX);
  131.                 var y = this.quadraticBezierPoint(t, startY, controlY, endY);
  132.                 points.push({x: Math.floor(x), y: Math.floor(y)});
  133.             }
  134.             
  135.             // 使用swip方法模拟贝塞尔曲线滑动
  136.             // 从起点开始,经过中间点,到达终点
  137.             hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
  138.             
  139.             printl("[二次贝塞尔曲线] 执行完成");
  140.             return true;
  141.         } catch (e) {
  142.             printl(`[二次贝塞尔曲线] 执行失败: ${e.message}`);
  143.             return false;
  144.         }
  145.     }
  146.    
  147.     /**
  148.      * 执行三次贝塞尔曲线滑动
  149.      * @param {number} startX - 起始X坐标
  150.      * @param {number} startY - 起始Y坐标
  151.      * @param {number} control1X - 控制点1 X坐标
  152.      * @param {number} control1Y - 控制点1 Y坐标
  153.      * @param {number} control2X - 控制点2 X坐标
  154.      * @param {number} control2Y - 控制点2 Y坐标
  155.      * @param {number} endX - 结束X坐标
  156.      * @param {number} endY - 结束Y坐标
  157.      */
  158.     executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY) {
  159.         printl(`[三次贝塞尔曲线] 起点(${startX}, ${startY}), 控制点1(${control1X}, ${control1Y}), 控制点2(${control2X}, ${control2Y}), 终点(${endX}, ${endY})`);
  160.         
  161.         try {
  162.             // 计算曲线上的点
  163.             var stepDuration = this.duration / this.steps;
  164.             var points = [];
  165.             
  166.             for (var i = 0; i <= this.steps; i++) {
  167.                 var t = i / this.steps;
  168.                 var x = this.cubicBezierPoint(t, startX, control1X, control2X, endX);
  169.                 var y = this.cubicBezierPoint(t, startY, control1Y, control2Y, endY);
  170.                 points.push({x: Math.floor(x), y: Math.floor(y)});
  171.             }
  172.             
  173.             // 使用swip方法模拟贝塞尔曲线滑动
  174.             // 从起点开始,经过中间点,到达终点
  175.             hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
  176.             
  177.             printl("[三次贝塞尔曲线] 执行完成");
  178.             return true;
  179.         } catch (e) {
  180.             printl(`[三次贝塞尔曲线] 执行失败: ${e.message}`);
  181.             return false;
  182.         }
  183.     }
  184.    
  185.     /**
  186.      * 执行百分比坐标的二次贝塞尔曲线滑动
  187.      * @param {number} startXPercent - 起始X百分比 (0.0 - 1.0)
  188.      * @param {number} startYPercent - 起始Y百分比 (0.0 - 1.0)
  189.      * @param {number} controlXPercent - 控制点X百分比 (0.0 - 1.0)
  190.      * @param {number} controlYPercent - 控制点Y百分比 (0.0 - 1.0)
  191.      * @param {number} endXPercent - 结束X百分比 (0.0 - 1.0)
  192.      * @param {number} endYPercent - 结束Y百分比 (0.0 - 1.0)
  193.      */
  194.     executeQuadraticBezierSlideByPercent(startXPercent, startYPercent, controlXPercent, controlYPercent, endXPercent, endYPercent) {
  195.         var startX = Math.floor(startXPercent * this.screenWidth);
  196.         var startY = Math.floor(startYPercent * this.screenHeight);
  197.         var controlX = Math.floor(controlXPercent * this.screenWidth);
  198.         var controlY = Math.floor(controlYPercent * this.screenHeight);
  199.         var endX = Math.floor(endXPercent * this.screenWidth);
  200.         var endY = Math.floor(endYPercent * this.screenHeight);
  201.         
  202.         return this.executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY);
  203.     }
  204.    
  205.     /**
  206.      * 执行百分比坐标的三次贝塞尔曲线滑动
  207.      * @param {number} startXPercent - 起始X百分比 (0.0 - 1.0)
  208.      * @param {number} startYPercent - 起始Y百分比 (0.0 - 1.0)
  209.      * @param {number} control1XPercent - 控制点1 X百分比 (0.0 - 1.0)
  210.      * @param {number} control1YPercent - 控制点1 Y百分比 (0.0 - 1.0)
  211.      * @param {number} control2XPercent - 控制点2 X百分比 (0.0 - 1.0)
  212.      * @param {number} control2YPercent - 控制点2 Y百分比 (0.0 - 1.0)
  213.      * @param {number} endXPercent - 结束X百分比 (0.0 - 1.0)
  214.      * @param {number} endYPercent - 结束Y百分比 (0.0 - 1.0)
  215.      */
  216.     executeCubicBezierSlideByPercent(startXPercent, startYPercent, control1XPercent, control1YPercent, control2XPercent, control2YPercent, endXPercent, endYPercent) {
  217.         var startX = Math.floor(startXPercent * this.screenWidth);
  218.         var startY = Math.floor(startYPercent * this.screenHeight);
  219.         var control1X = Math.floor(control1XPercent * this.screenWidth);
  220.         var control1Y = Math.floor(control1YPercent * this.screenHeight);
  221.         var control2X = Math.floor(control2XPercent * this.screenWidth);
  222.         var control2Y = Math.floor(control2YPercent * this.screenHeight);
  223.         var endX = Math.floor(endXPercent * this.screenWidth);
  224.         var endY = Math.floor(endYPercent * this.screenHeight);
  225.         
  226.         return this.executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY);
  227.     }
  228. }

  229. // HID贝塞尔曲线工具类 - 静态方法集合
  230. class HIDBezierUtils {
  231.     /**
  232.      * 线性滑动
  233.      * @param {number} startX - 起始X坐标
  234.      * @param {number} startY - 起始Y坐标
  235.      * @param {number} endX - 结束X坐标
  236.      * @param {number} endY - 结束Y坐标
  237.      * @param {number} duration - 持续时间(毫秒)
  238.      */
  239.     static linearSlide(startX, startY, endX, endY, duration = 500) {
  240.         return hid.swip(startX, startY, endX, endY, 50, duration, 50);
  241.     }
  242.    
  243.     /**
  244.      * 水平滑动(绝对坐标)
  245.      * @param {number} startX - 起始X坐标
  246.      * @param {number} y - Y坐标
  247.      * @param {number} endX - 结束X坐标
  248.      * @param {number} duration - 持续时间(毫秒)
  249.      */
  250.     static horizontalSlide(startX, y, endX, duration = 500) {
  251.         return hid.swipH(startX, y, endX, 50, duration, 50);
  252.     }
  253.    
  254.     /**
  255.      * 垂直滑动(绝对坐标)
  256.      * @param {number} x - X坐标
  257.      * @param {number} startY - 起始Y坐标
  258.      * @param {number} endY - 结束Y坐标
  259.      * @param {number} duration - 持续时间(毫秒)
  260.      */
  261.     static verticalSlide(x, startY, endY, duration = 500) {
  262.         return hid.swipV(x, startY, endY, 50, duration, 50);
  263.     }
  264.    
  265.     /**
  266.      * 水平滑动(百分比坐标)
  267.      * @param {number} startXPercent - 起始X百分比
  268.      * @param {number} yPercent - Y百分比
  269.      * @param {number} endXPercent - 结束X百分比
  270.      * @param {number} duration - 持续时间(毫秒)
  271.      */
  272.     static horizontalSlideByPercent(startXPercent, yPercent, endXPercent, duration = 500) {
  273.         return hid.swipHPercent(startXPercent, yPercent, endXPercent, 50, duration, 50);
  274.     }
  275.    
  276.     /**
  277.      * 垂直滑动(百分比坐标)
  278.      * @param {number} xPercent - X百分比
  279.      * @param {number} startYPercent - 起始Y百分比
  280.      * @param {number} endYPercent - 结束Y百分比
  281.      * @param {number} duration - 持续时间(毫秒)
  282.      */
  283.     static verticalSlideByPercent(xPercent, startYPercent, endYPercent, duration = 500) {
  284.         return hid.swipVPercent(xPercent, startYPercent, xPercent, endYPercent, 50, duration, 50);
  285.     }
  286. }

  287. // 主函数 - 演示HID贝塞尔曲线功能
  288. function main() {
  289.     printl("========================================");
  290.     printl("HID贝塞尔曲线运动控制器 - 演示程序");
  291.     printl("========================================");
  292.    
  293.     // 创建HID贝塞尔曲线运动管理器实例
  294.     var mover = new HIDBezierCurveMover({
  295.         duration: 2000,
  296.         steps: 100,
  297.         press: 50,
  298.         delayUp: 50
  299.     });
  300.    
  301.     // 检查HID状态
  302.     if (!mover.checkHIDStatus()) {
  303.         printl("HID状态检查失败,跳过演示,仅显示类定义");
  304.         printl("您可以在HID环境可用时调用相关方法");
  305.         return;
  306.     }
  307.    
  308.     printl("");
  309.     printl("演示1: 线性滑动(使用HID原生方法)");
  310.     printl("----------------------------------------");
  311.     try {
  312.         HIDBezierUtils.linearSlide(333, 1146, 370, 183, 500);
  313.         sleep.second(2);
  314.     } catch (e) {
  315.         printl("演示1执行失败: " + e.message);
  316.     }
  317.    
  318.     printl("");
  319.     printl("演示2: 水平百分比滑动");
  320.     printl("----------------------------------------");
  321.     try {
  322.         HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
  323.         sleep.second(2);
  324.     } catch (e) {
  325.         printl("演示2执行失败: " + e.message);
  326.     }
  327.    
  328.     printl("");
  329.     printl("演示3: 垂直百分比滑动");
  330.     printl("----------------------------------------");
  331.     try {
  332.         HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
  333.         sleep.second(2);
  334.     } catch (e) {
  335.         printl("演示3执行失败: " + e.message);
  336.     }
  337.    
  338.     printl("");
  339.     printl("演示4: 三次贝塞尔曲线滑动(绝对坐标)");
  340.     printl("----------------------------------------");
  341.     try {
  342.         mover.executeCubicBezierSlide(
  343.             333, 1146,    // 起点
  344.             100, 300,     // 控制点1
  345.             400, 600,     // 控制点2
  346.             370, 183      // 终点
  347.         );
  348.         sleep.second(2);
  349.     } catch (e) {
  350.         printl("演示4执行失败: " + e.message);
  351.     }
  352.    
  353.     printl("");
  354.     printl("演示5: 三次贝塞尔曲线滑动(百分比坐标)");
  355.     printl("----------------------------------------");
  356.     try {
  357.         mover.executeCubicBezierSlideByPercent(
  358.             0.2, 0.8,     // 起点 (20%, 80%)
  359.             0.1, 0.3,     // 控制点1 (10%, 30%)
  360.             0.5, 0.6,     // 控制点2 (50%, 60%)
  361.             0.3, 0.2      // 终点 (30%, 20%)
  362.         );
  363.         sleep.second(2);
  364.     } catch (e) {
  365.         printl("演示5执行失败: " + e.message);
  366.     }
  367.    
  368.     printl("");
  369.     printl("演示6: 二次贝塞尔曲线滑动(百分比坐标)");
  370.     printl("----------------------------------------");
  371.     try {
  372.         mover.executeQuadraticBezierSlideByPercent(
  373.             0.2, 0.8,     // 起点 (20%, 80%)
  374.             0.5, 0.3,     // 控制点 (50%, 30%)
  375.             0.8, 0.2      // 终点 (80%, 20%)
  376.         );
  377.     } catch (e) {
  378.         printl("演示6执行失败: " + e.message);
  379.     }
  380.    
  381.     printl("");
  382.     printl("========================================");
  383.     printl("所有演示执行完成!");
  384.     printl("========================================");
  385. }

  386. // 启动主函数
  387. main();

  388. /**
  389. * 使用说明:
  390. *
  391. * // 1. 创建运动管理器实例
  392. * var mover = new HIDBezierCurveMover({
  393. *     duration: 2000,  // 滑动持续时间(毫秒)
  394. *     steps: 100,      // 曲线分段数
  395. *     press: 50,       // 按压参数
  396. *     delayUp: 50      // 延迟抬起时间
  397. * });
  398. *
  399. * // 2. 检查HID状态
  400. * if (!mover.checkHIDStatus()) {
  401. *     return; // HID不可用时退出
  402. * }
  403. *
  404. * // 3. 执行各种滑动操作
  405. *
  406. * // 三次贝塞尔曲线(绝对坐标)
  407. * mover.executeCubicBezierSlide(
  408. *     startX, control1X, control2X, endX,
  409. *     startY, control1Y, control2Y, endY
  410. * );
  411. *
  412. * // 三次贝塞尔曲线(百分比坐标)
  413. * mover.executeCubicBezierSlideByPercent(
  414. *     0.2, 0.1, 0.5, 0.3,  // X坐标参数
  415. *     0.8, 0.3, 0.6, 0.2   // Y坐标参数
  416. * );
  417. *
  418. * // 二次贝塞尔曲线(百分比坐标)
  419. * mover.executeQuadraticBezierSlideByPercent(
  420. *     0.2, 0.5, 0.8,  // X坐标参数
  421. *     0.8, 0.3, 0.2   // Y坐标参数
  422. * );
  423. *
  424. * // 4. 使用静态工具方法(快速操作)
  425. * HIDBezierUtils.linearSlide(100, 200, 500, 600, 500);
  426. * HIDBezierUtils.horizontalSlide(100, 300, 500, 500);
  427. * HIDBezierUtils.verticalSlide(300, 1000, 200, 500);
  428. * HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
  429. * HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
  430. */
复制代码







欢迎光临 自动发帖软件 (http://www.fatiegongju.com/) Powered by Discuz! X3.2