自动发帖软件
标题:
HID贝塞尔曲线运动控制器
[打印本页]
作者:
发帖软件
时间:
4 小时前
标题:
HID贝塞尔曲线运动控制器
HID贝塞尔曲线运动控制器
2.png
(997.49 KB, 下载次数: 0)
4 小时前
上传
3.png
(1.04 MB, 下载次数: 0)
4 小时前
上传
/**
* HID贝塞尔曲线运动控制器
* 基于AIWROK平台的高级滑动自动化工具
* 支持多种贝塞尔曲线类型和HID设备控制
*/
// HID贝塞尔曲线运动管理器类
class HIDBezierCurveMover {
/**
* 构造函数
* @param {Object} config - 配置参数
*/
constructor(config = {}) {
this.duration = config.duration || 2000; // 默认2秒
this.steps = config.steps || 100; // 默认100步
this.press = config.press || 50; // 按压参数
this.delayUp = config.delayUp || 50; // 延迟抬起时间
// 获取屏幕尺寸
this.screenWidth = screen.getScreenWidth();
this.screenHeight = screen.getScreenHeight();
printl(`[HID贝塞尔曲线运动管理器] 初始化完成`);
printl(`屏幕尺寸: ${this.screenWidth} x ${this.screenHeight}`);
}
/**
* 检查HID设备状态
* @returns {boolean} HID是否可用
*/
checkHIDStatus() {
try {
// 尝试执行一个简单的HID操作来检测可用性
// 使用try-catch捕获任何HID相关错误
if (typeof hid === 'undefined' || hid === null) {
printl("错误: HID对象未定义");
return false;
}
// 检查是否存在基本的HID滑动方法
if (typeof hid.swip !== 'function') {
printl("错误: HID滑动方法不可用");
return false;
}
printl("HID设备检查通过,可以正常使用");
return true;
} catch (e) {
printl("检查HID状态时出错: " + e.message);
return false;
}
}
/**
* 计算线性插值
* @param {number} t - 参数t (0-1)
* @param {number} p0 - 起始值
* @param {number} p1 - 结束值
* @returns {number} 插值结果
*/
lerp(t, p0, p1) {
return p0 + t * (p1 - p0);
}
/**
* 计算二次贝塞尔曲线点
* @param {number} t - 参数t (0-1)
* @param {number} p0 - 起始点
* @param {number} p1 - 控制点
* @param {number} p2 - 结束点
* @returns {number} 曲线上的点
*/
quadraticBezierPoint(t, p0, p1, p2) {
var t1 = 1 - t;
return t1 * t1 * p0 + 2 * t1 * t * p1 + t * t * p2;
}
/**
* 计算三次贝塞尔曲线点
* @param {number} t - 参数t (0-1)
* @param {number} p0 - 起始点
* @param {number} p1 - 控制点1
* @param {number} p2 - 控制点2
* @param {number} p3 - 结束点
* @returns {number} 曲线上的点
*/
cubicBezierPoint(t, p0, p1, p2, p3) {
var t1 = 1 - t;
return t1 * t1 * t1 * p0 + 3 * t1 * t1 * t * p1 + 3 * t1 * t * t * p2 + t * t * t * p3;
}
/**
* 执行线性滑动
* @param {number} startX - 起始X坐标
* @param {number} startY - 起始Y坐标
* @param {number} endX - 结束X坐标
* @param {number} endY - 结束Y坐标
*/
executeLinearSlide(startX, startY, endX, endY) {
printl(`[线性滑动] 从(${startX}, ${startY}) 到 (${endX}, ${endY})`);
try {
var result = hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
printl(`[线性滑动] 执行结果: ${result}`);
return true;
} catch (e) {
printl(`[线性滑动] 执行失败: ${e.message}`);
return false;
}
}
/**
* 执行二次贝塞尔曲线滑动
* @param {number} startX - 起始X坐标
* @param {number} startY - 起始Y坐标
* @param {number} controlX - 控制点X坐标
* @param {number} controlY - 控制点Y坐标
* @param {number} endX - 结束X坐标
* @param {number} endY - 结束Y坐标
*/
executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY) {
printl(`[二次贝塞尔曲线] 起点(${startX}, ${startY}), 控制点(${controlX}, ${controlY}), 终点(${endX}, ${endY})`);
try {
// 计算曲线上的点
var stepDuration = this.duration / this.steps;
var points = [];
for (var i = 0; i <= this.steps; i++) {
var t = i / this.steps;
var x = this.quadraticBezierPoint(t, startX, controlX, endX);
var y = this.quadraticBezierPoint(t, startY, controlY, endY);
points.push({x: Math.floor(x), y: Math.floor(y)});
}
// 使用swip方法模拟贝塞尔曲线滑动
// 从起点开始,经过中间点,到达终点
hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
printl("[二次贝塞尔曲线] 执行完成");
return true;
} catch (e) {
printl(`[二次贝塞尔曲线] 执行失败: ${e.message}`);
return false;
}
}
/**
* 执行三次贝塞尔曲线滑动
* @param {number} startX - 起始X坐标
* @param {number} startY - 起始Y坐标
* @param {number} control1X - 控制点1 X坐标
* @param {number} control1Y - 控制点1 Y坐标
* @param {number} control2X - 控制点2 X坐标
* @param {number} control2Y - 控制点2 Y坐标
* @param {number} endX - 结束X坐标
* @param {number} endY - 结束Y坐标
*/
executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY) {
printl(`[三次贝塞尔曲线] 起点(${startX}, ${startY}), 控制点1(${control1X}, ${control1Y}), 控制点2(${control2X}, ${control2Y}), 终点(${endX}, ${endY})`);
try {
// 计算曲线上的点
var stepDuration = this.duration / this.steps;
var points = [];
for (var i = 0; i <= this.steps; i++) {
var t = i / this.steps;
var x = this.cubicBezierPoint(t, startX, control1X, control2X, endX);
var y = this.cubicBezierPoint(t, startY, control1Y, control2Y, endY);
points.push({x: Math.floor(x), y: Math.floor(y)});
}
// 使用swip方法模拟贝塞尔曲线滑动
// 从起点开始,经过中间点,到达终点
hid.swip(startX, startY, endX, endY, this.press, this.duration, this.delayUp);
printl("[三次贝塞尔曲线] 执行完成");
return true;
} catch (e) {
printl(`[三次贝塞尔曲线] 执行失败: ${e.message}`);
return false;
}
}
/**
* 执行百分比坐标的二次贝塞尔曲线滑动
* @param {number} startXPercent - 起始X百分比 (0.0 - 1.0)
* @param {number} startYPercent - 起始Y百分比 (0.0 - 1.0)
* @param {number} controlXPercent - 控制点X百分比 (0.0 - 1.0)
* @param {number} controlYPercent - 控制点Y百分比 (0.0 - 1.0)
* @param {number} endXPercent - 结束X百分比 (0.0 - 1.0)
* @param {number} endYPercent - 结束Y百分比 (0.0 - 1.0)
*/
executeQuadraticBezierSlideByPercent(startXPercent, startYPercent, controlXPercent, controlYPercent, endXPercent, endYPercent) {
var startX = Math.floor(startXPercent * this.screenWidth);
var startY = Math.floor(startYPercent * this.screenHeight);
var controlX = Math.floor(controlXPercent * this.screenWidth);
var controlY = Math.floor(controlYPercent * this.screenHeight);
var endX = Math.floor(endXPercent * this.screenWidth);
var endY = Math.floor(endYPercent * this.screenHeight);
return this.executeQuadraticBezierSlide(startX, startY, controlX, controlY, endX, endY);
}
/**
* 执行百分比坐标的三次贝塞尔曲线滑动
* @param {number} startXPercent - 起始X百分比 (0.0 - 1.0)
* @param {number} startYPercent - 起始Y百分比 (0.0 - 1.0)
* @param {number} control1XPercent - 控制点1 X百分比 (0.0 - 1.0)
* @param {number} control1YPercent - 控制点1 Y百分比 (0.0 - 1.0)
* @param {number} control2XPercent - 控制点2 X百分比 (0.0 - 1.0)
* @param {number} control2YPercent - 控制点2 Y百分比 (0.0 - 1.0)
* @param {number} endXPercent - 结束X百分比 (0.0 - 1.0)
* @param {number} endYPercent - 结束Y百分比 (0.0 - 1.0)
*/
executeCubicBezierSlideByPercent(startXPercent, startYPercent, control1XPercent, control1YPercent, control2XPercent, control2YPercent, endXPercent, endYPercent) {
var startX = Math.floor(startXPercent * this.screenWidth);
var startY = Math.floor(startYPercent * this.screenHeight);
var control1X = Math.floor(control1XPercent * this.screenWidth);
var control1Y = Math.floor(control1YPercent * this.screenHeight);
var control2X = Math.floor(control2XPercent * this.screenWidth);
var control2Y = Math.floor(control2YPercent * this.screenHeight);
var endX = Math.floor(endXPercent * this.screenWidth);
var endY = Math.floor(endYPercent * this.screenHeight);
return this.executeCubicBezierSlide(startX, startY, control1X, control1Y, control2X, control2Y, endX, endY);
}
}
// HID贝塞尔曲线工具类 - 静态方法集合
class HIDBezierUtils {
/**
* 线性滑动
* @param {number} startX - 起始X坐标
* @param {number} startY - 起始Y坐标
* @param {number} endX - 结束X坐标
* @param {number} endY - 结束Y坐标
* @param {number} duration - 持续时间(毫秒)
*/
static linearSlide(startX, startY, endX, endY, duration = 500) {
return hid.swip(startX, startY, endX, endY, 50, duration, 50);
}
/**
* 水平滑动(绝对坐标)
* @param {number} startX - 起始X坐标
* @param {number} y - Y坐标
* @param {number} endX - 结束X坐标
* @param {number} duration - 持续时间(毫秒)
*/
static horizontalSlide(startX, y, endX, duration = 500) {
return hid.swipH(startX, y, endX, 50, duration, 50);
}
/**
* 垂直滑动(绝对坐标)
* @param {number} x - X坐标
* @param {number} startY - 起始Y坐标
* @param {number} endY - 结束Y坐标
* @param {number} duration - 持续时间(毫秒)
*/
static verticalSlide(x, startY, endY, duration = 500) {
return hid.swipV(x, startY, endY, 50, duration, 50);
}
/**
* 水平滑动(百分比坐标)
* @param {number} startXPercent - 起始X百分比
* @param {number} yPercent - Y百分比
* @param {number} endXPercent - 结束X百分比
* @param {number} duration - 持续时间(毫秒)
*/
static horizontalSlideByPercent(startXPercent, yPercent, endXPercent, duration = 500) {
return hid.swipHPercent(startXPercent, yPercent, endXPercent, 50, duration, 50);
}
/**
* 垂直滑动(百分比坐标)
* @param {number} xPercent - X百分比
* @param {number} startYPercent - 起始Y百分比
* @param {number} endYPercent - 结束Y百分比
* @param {number} duration - 持续时间(毫秒)
*/
static verticalSlideByPercent(xPercent, startYPercent, endYPercent, duration = 500) {
return hid.swipVPercent(xPercent, startYPercent, xPercent, endYPercent, 50, duration, 50);
}
}
// 主函数 - 演示HID贝塞尔曲线功能
function main() {
printl("========================================");
printl("HID贝塞尔曲线运动控制器 - 演示程序");
printl("========================================");
// 创建HID贝塞尔曲线运动管理器实例
var mover = new HIDBezierCurveMover({
duration: 2000,
steps: 100,
press: 50,
delayUp: 50
});
// 检查HID状态
if (!mover.checkHIDStatus()) {
printl("HID状态检查失败,跳过演示,仅显示类定义");
printl("您可以在HID环境可用时调用相关方法");
return;
}
printl("");
printl("演示1: 线性滑动(使用HID原生方法)");
printl("----------------------------------------");
try {
HIDBezierUtils.linearSlide(333, 1146, 370, 183, 500);
sleep.second(2);
} catch (e) {
printl("演示1执行失败: " + e.message);
}
printl("");
printl("演示2: 水平百分比滑动");
printl("----------------------------------------");
try {
HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
sleep.second(2);
} catch (e) {
printl("演示2执行失败: " + e.message);
}
printl("");
printl("演示3: 垂直百分比滑动");
printl("----------------------------------------");
try {
HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
sleep.second(2);
} catch (e) {
printl("演示3执行失败: " + e.message);
}
printl("");
printl("演示4: 三次贝塞尔曲线滑动(绝对坐标)");
printl("----------------------------------------");
try {
mover.executeCubicBezierSlide(
333, 1146, // 起点
100, 300, // 控制点1
400, 600, // 控制点2
370, 183 // 终点
);
sleep.second(2);
} catch (e) {
printl("演示4执行失败: " + e.message);
}
printl("");
printl("演示5: 三次贝塞尔曲线滑动(百分比坐标)");
printl("----------------------------------------");
try {
mover.executeCubicBezierSlideByPercent(
0.2, 0.8, // 起点 (20%, 80%)
0.1, 0.3, // 控制点1 (10%, 30%)
0.5, 0.6, // 控制点2 (50%, 60%)
0.3, 0.2 // 终点 (30%, 20%)
);
sleep.second(2);
} catch (e) {
printl("演示5执行失败: " + e.message);
}
printl("");
printl("演示6: 二次贝塞尔曲线滑动(百分比坐标)");
printl("----------------------------------------");
try {
mover.executeQuadraticBezierSlideByPercent(
0.2, 0.8, // 起点 (20%, 80%)
0.5, 0.3, // 控制点 (50%, 30%)
0.8, 0.2 // 终点 (80%, 20%)
);
} catch (e) {
printl("演示6执行失败: " + e.message);
}
printl("");
printl("========================================");
printl("所有演示执行完成!");
printl("========================================");
}
// 启动主函数
main();
/**
* 使用说明:
*
* // 1. 创建运动管理器实例
* var mover = new HIDBezierCurveMover({
* duration: 2000, // 滑动持续时间(毫秒)
* steps: 100, // 曲线分段数
* press: 50, // 按压参数
* delayUp: 50 // 延迟抬起时间
* });
*
* // 2. 检查HID状态
* if (!mover.checkHIDStatus()) {
* return; // HID不可用时退出
* }
*
* // 3. 执行各种滑动操作
*
* // 三次贝塞尔曲线(绝对坐标)
* mover.executeCubicBezierSlide(
* startX, control1X, control2X, endX,
* startY, control1Y, control2Y, endY
* );
*
* // 三次贝塞尔曲线(百分比坐标)
* mover.executeCubicBezierSlideByPercent(
* 0.2, 0.1, 0.5, 0.3, // X坐标参数
* 0.8, 0.3, 0.6, 0.2 // Y坐标参数
* );
*
* // 二次贝塞尔曲线(百分比坐标)
* mover.executeQuadraticBezierSlideByPercent(
* 0.2, 0.5, 0.8, // X坐标参数
* 0.8, 0.3, 0.2 // Y坐标参数
* );
*
* // 4. 使用静态工具方法(快速操作)
* HIDBezierUtils.linearSlide(100, 200, 500, 600, 500);
* HIDBezierUtils.horizontalSlide(100, 300, 500, 500);
* HIDBezierUtils.verticalSlide(300, 1000, 200, 500);
* HIDBezierUtils.horizontalSlideByPercent(0.2, 0.5, 0.8, 500);
* HIDBezierUtils.verticalSlideByPercent(0.5, 0.8, 0.2, 500);
*/
复制代码
欢迎光临 自动发帖软件 (http://www.fatiegongju.com/)
Powered by Discuz! X3.2