B2B网络软件

标题: 手机改了分辨率后有误差用公式计算加减还原点击 [打印本页]

作者: YYPOST群发软件    时间: 前天 08:13
标题: 手机改了分辨率后有误差用公式计算加减还原点击

有的人用改分辩率软件,更改了手机的分辩率,为了让所有手机通用一种点击方法,计算偏差,可以用这段代码实现。

两种方法如下:
手机改了分辨率后有误差用公式计算加减还原点击 B2B网络软件


第一种方法:

function calculateFunction(inputValue) {
    function leastSquaresFit(x, y) {
        var n = x.length;
        var sumX = 0;
        var sumY = 0;
        var sumXY = 0;
        var sumX2 = 0;

        for (var i = 0; i < n; i++) {
            sumX += x;
            sumY += y;
            sumXY += x * y;
            sumX2 += x * x;
        }

        var denominator = (n * sumX2 - sumX * sumX);
        if (denominator === 0) {
            return [0, 0]; // 避免除以零
        }

        var a = (n * sumXY - sumX * sumY) / denominator;
        var b = (sumY - a * sumX) / n;

        return [a, b];
    }

    function linearFunction(x, a, b) {
        return a * x + b;
    }

    function clipValue(value, maxValue) {
        return Math.min(value, maxValue);
    }

    var x = [94, 155, 233, 405, 591, 766, 844, 930, 208];
    var y = [0, 65, 157, 380, 580, 810, 916, 1021, 140];
    var maxValue = 1080;

    // 进行线性拟合,得到线性函数的系数 a 和 b
    var coefficients = leastSquaresFit(x, y);
    var a = coefficients[0];
    var b = coefficients[1];

    if (typeof inputValue === 'number') {
        // 输入为 x 值,计算 y 值
        var predictedY = linearFunction(inputValue, a, b);
        // 对预测结果进行裁剪,确保不超过 1080
        predictedY = clipValue(predictedY, maxValue);
        return predictedY;
    } else if (typeof inputValue === 'number' && inputValue >= 0 && inputValue <= maxValue) {
        // 输入为 y 值,计算 x 值
        if (a === 0) {
            // 当 a 为 0 时,若 b 等于输入的 y 值,x 可以是任意值;否则,无解
            if (b === inputValue) {
                return null;
            } else {
                return NaN;
            }
        }
        var predictedX = (inputValue - b) / a;
        return predictedX;
    } else {
        throw new Error('输入不合法,请输入一个数字且范围在 0 到 ' + maxValue + ' 之间');
    }
}

// 调用函数进行正向计算(根据 x 计算 y)
var result1 = calculateFunction(100);
console.log("当 x = 550 时,计算得到的 y 值为: " + result1);

// 调用函数进行反向计算(根据 y 计算 x)
var result2 = calculateFunction(1);
console.log("当 y = 0 时,计算得到的 x 值为: " + result2);

手机改了分辨率后有误差用公式计算加减,### 函数 calculateFunction

这个函数的主要目的是根据输入的数值进行线性拟合计算,可以正向计算(根据 x 值计算 y 值)或反向计算(根据 y 值计算 x 值)。

内部函数

  1. leastSquaresFit(x, y)

  2. linearFunction(x, a, b)

  3. clipValue(value, maxValue)

主要逻辑

示例调用

注意事项

当然看上去很复杂,其实有更简单的方法:

第二种方法:

function adjustPos(origPos, origRes, newRes) {
    // 计算比例因子
    var scaleFactor = newRes / origRes;


    // 调整点击位置
    var adjustedPos = origPos * scaleFactor;

    return adjustedPos;
}


function adjustPercent(origX, origY, origWidth, origHeight, newWidth, newHeight) {
    // 调整 x 和 y 坐标
    var adjX = adjustPos(origX * origWidth, origWidth, newWidth);
    var adjY = adjustPos(origY * origHeight, origHeight, newHeight);


    // 转换回百分比
    var adjXPercent = adjX / newWidth;
    var adjYPercent = adjY / newHeight;


    return [adjXPercent, adjYPercent];
}


function clickAdjusted(origX, origY, origWidth, origHeight, newWidth, newHeight) {
    // 计算调整后的百分比坐标
    var [adjX, adjY] = adjustPercent(origX, origY, origWidth, origHeight, newWidth, newHeight);
    console.log("调整后的点击位置为: (" + adjX + ", " + adjY + ")");


    // 使用 auto.clickPercent 方法进行点击
    auto.clickPercent(adjX, adjY);
}


// 示例使用
var origX = 0.6076; // 原始 x 百分比
var origY = 0.1885; // 原始 y 百分比
var origWidth = 1080; // 原始分辨率宽度
var origHeight = 1920; // 原始分辨率高度
var newWidth = 720; // 新分辨率宽度
var newHeight = 1280; // 新分辨率高度


// 直接调用封装的 clickAdjusted 函数
clickAdjusted(origX, origY, origWidth, origHeight, newWidth, newHeight);

这段代码的主要作用是根据手机屏幕的不同分辨率,调整点击的位置,以便在不同设备上实现相同的点击效果。以下是对代码的详细解释:

  1. 调整位置的函数 adjustPos:

  1. 调整百分比坐标的函数 adjustPercent:

  1. 示例使用部分:

  1. 自动点击方法 autoClick:

  1. 调用自动点击方法:http://bbs.aiwork24.com/thread-125-1-1.html

这个代码的主要目的在于使得在不同的屏幕分辨率下,点击的行为能够保持一致,从而提高了在不同设备上的用户体验。你提到的 auto.clickPercent(0.401, 0.2012) 是你自己使用的点击方法,可以直接替换最后一行的 autoClick 调用






欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2