ÓеÄÈËÓøķֱçÂÊÈí¼þ£¬¸ü¸ÄÁËÊÖ»úµÄ·Ö±çÂÊ£¬ÎªÁËÈÃËùÓÐÊÖ»úͨÓÃÒ»ÖÖµã»÷·½·¨£¬¼ÆËãÆ«²î£¬¿ÉÒÔÓÃÕâ¶Î´úÂëʵÏÖ¡£ Á½ÖÖ·½·¨ÈçÏ£º
µÚÒ»ÖÖ·½·¨£º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;
var coefficients = leastSquaresFit(x, y);
var a = coefficients[0];
var b = coefficients[1];
if (typeof inputValue === 'number') {
var predictedY = linearFunction(inputValue, a, b);
predictedY = clipValue(predictedY, maxValue);
return predictedY;
} else if (typeof inputValue === 'number' && inputValue >= 0 && inputValue <= maxValue) {
if (a === 0) {
if (b === inputValue) {
return null;
} else {
return NaN;
}
}
var predictedX = (inputValue - b) / a;
return predictedX;
} else {
throw new Error('ÊäÈë²»ºÏ·¨£¬ÇëÊäÈëÒ»¸öÊý×ÖÇÒ·¶Î§ÔÚ 0 µ½ ' + maxValue + ' Ö®¼ä');
}
}
var result1 = calculateFunction(100);
console.log("µ± x = 550 ʱ£¬¼ÆËãµÃµ½µÄ y ֵΪ: " + result1);
var result2 = calculateFunction(1);
console.log("µ± y = 0 ʱ£¬¼ÆËãµÃµ½µÄ x ֵΪ: " + result2);
ÊÖ»ú¸ÄÁË·Ö±æÂʺóÓÐÎó²îÓù«Ê½¼ÆËã¼Ó¼õ£¬### º¯Êý calculateFunction Õâ¸öº¯ÊýµÄÖ÷ҪĿµÄÊǸù¾ÝÊäÈëµÄÊýÖµ½øÐÐÏßÐÔÄâºÏ¼ÆË㣬¿ÉÒÔÕýÏò¼ÆË㣨¸ù¾Ý x Öµ¼ÆËã y Öµ£©»ò·´Ïò¼ÆË㣨¸ù¾Ý y Öµ¼ÆËã x Öµ£©¡£ ÄÚ²¿º¯ÊýleastSquaresFit(x, y)
- Õâ¸öº¯ÊýʹÓÃ×îС¶þ³Ë·¨À´ÄâºÏ¸ø¶¨µÄÊý¾Ýµã
x ºÍ y £¬²¢·µ»ØÏßÐÔº¯Êý y = ax + b µÄϵÊý a ºÍ b ¡£ n ÊÇÊý¾ÝµãµÄÊýÁ¿¡£sumX ¡¢sumY ¡¢sumXY ºÍ sumX2 ·Ö±ðÊÇ x µÄºÍ¡¢y µÄºÍ¡¢x ºÍ y µÄ³Ë»ýÖ®ºÍ¡¢x µÄƽ·½ºÍ¡£- ͨ¹ýÕâЩºÍ¼ÆËãµÃµ½
a ºÍ b µÄÖµ¡£ - Èç¹û·ÖĸΪÁ㣬ΪÁ˱ÜÃâ³ýÒÔÁãµÄ´íÎ󣬷µ»Ø
[0, 0] ¡£
linearFunction(x, a, b)
- ÕâÊÇÒ»¸ö¼òµ¥µÄÏßÐÔº¯Êý£¬¸ù¾Ý¸ø¶¨µÄ
x ÖµÒÔ¼°ÄâºÏµÃµ½µÄϵÊý a ºÍ b £¬¼ÆËã y µÄÖµ¡£
clipValue(value, maxValue)
- Õâ¸öº¯ÊýÓÃÓÚÈ·±£·µ»ØµÄ
y Öµ²»³¬¹ýÔ¤ÏÈÉ趨µÄ×î´óÖµ maxValue ¡£ - ʹÓÃ
Math.min À´±È½ÏÊäÈëµÄ value ºÍ maxValue £¬·µ»Ø½ÏСµÄÄǸöÖµ¡£
Ö÷ÒªÂß¼- Ê×ÏÈ£¬¶¨ÒåÁË
x ºÍ y µÄÊý¾ÝÊý×飬ÒÔ¼° maxValue Ϊ 1080¡£ - È»ºó£¬Ê¹ÓÃ
leastSquaresFit º¯Êý¼ÆËã³öÄâºÏÖ±ÏßµÄϵÊý a ºÍ b ¡£ - ¸ù¾Ý
inputValue µÄÀàÐͺͷ¶Î§½øÐв»Í¬µÄ¼ÆË㣺- Èç¹û
inputValue ÊÇÒ»¸öÊý×Ö£¬¼ÆËã¶ÔÓ¦µÄ y Öµ¡£Ê×ÏÈͨ¹ý linearFunction ¼ÆË㣬Ȼºóͨ¹ý clipValue È·±£ y Öµ²»³¬¹ý 1080¡£ - Èç¹û
inputValue ÊÇÒ»¸öÊý×ÖÇÒÔÚ 0 µ½ maxValue Ö®¼ä£¬³¢ÊÔ·´Ïò¼ÆËã¶ÔÓ¦µÄ x Öµ¡£µ«Èç¹û a Ϊ 0£¬Òâζ×ÅÖ±ÏßƽÐÐÓÚ x Öᣬ¸ù¾Ý b ÊÇ·ñµÈÓÚ inputValue ÅжÏÊÇ·ñÓжà½â»òÎ޽⡣ - Èç¹ûÊäÈë²»·ûºÏÒªÇó£¬Å׳öÒ»¸ö´íÎóÐÅÏ¢¡£
ʾÀýµ÷ÓÃ×¢ÒâÊÂÏî´úÂëÖз´Ïò¼ÆËãµÄ²¿·ÖÓÐÒ»¸öÂß¼´íÎó£¬else if (typeof inputValue === 'number' && inputValue >= 0 && inputValue <= maxValue) Õⲿ·ÖÌõ¼þÅжÏËƺõÓëÇ°ÃæµÄÌõ¼þÖظ´£¬Ö»Òª typeof inputValue === 'number' £¬¾Í²»ÐèÒªÔÙ´ÎÅÐ¶Ï inputValue ÊÇ·ñÔÚ 0 µ½ maxValue Ö®¼ä¡£Òò´ËÕⲿ·Ö´úÂë¿ÉÒÔÐÞ¸ÄΪ£º else if (inputValue >= 0 && inputValue <= maxValue) {
- ·´Ïò¼ÆËãʱ£¬Èç¹û
a Ϊ 0£¬Ôò b µÄÖµ¾ÍÊÇ y ÔÚËùÓÐ x ÖµÉϵij£ÊýÖµ¡£Èç¹û b µÈÓÚ inputValue £¬ÄÇôÀíÂÛÉ϶ÔÓÚËùÓÐµÄ x Öµ¶¼¿ÉÒԵõ½Õâ¸ö y Öµ£¬Òò´Ë·µ»Ø null ±íʾÓжà¸ö½â¡£Èç¹û b ²»µÈÓÚ inputValue £¬ÔòûÓн⣬·µ»Ø NaN ¡£
µ±È»¿´ÉÏÈ¥ºÜ¸´ÔÓ£¬ÆäʵÓиü¼òµ¥µÄ·½·¨£º µÚ¶þÖÖ·½·¨£º function adjustPos(origPos, origRes, newRes) {
var scaleFactor = newRes / origRes;
var adjustedPos = origPos * scaleFactor;
return adjustedPos;
}
function adjustPercent(origX, origY, origWidth, origHeight, newWidth, newHeight) {
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(adjX, adjY);
}
var origX = 0.6076;
var origY = 0.1885;
var origWidth = 1080;
var origHeight = 1920;
var newWidth = 720;
var newHeight = 1280;
clickAdjusted(origX, origY, origWidth, origHeight, newWidth, newHeight);
Õâ¶Î´úÂëµÄÖ÷Òª×÷ÓÃÊǸù¾ÝÊÖ»úÆÁÄ»µÄ²»Í¬·Ö±æÂÊ£¬µ÷Õûµã»÷µÄλÖã¬ÒÔ±ãÔÚ²»Í¬É豸ÉÏʵÏÖÏàͬµÄµã»÷Ч¹û¡£ÒÔÏÂÊǶԴúÂëµÄÏêϸ½âÊÍ£º µ÷ÕûλÖõĺ¯Êý adjustPos : - ¸Ãº¯Êý½ÓÊÜÔʼλÖã¨
origPos £©¡¢Ôʼ·Ö±æÂÊ£¨origRes £©ºÍзֱæÂÊ£¨newRes £©×÷Ϊ²ÎÊý¡£ Ëüͨ¹ý¼ÆËã±ÈÀýÒò×Ó£¨scaleFactor £©£¬È»ºó½«ÔʼλÖóËÒÔÕâ¸öÒò×ÓÀ´µÃµ½µ÷ÕûºóµÄµã»÷λÖã¨adjustedPos £©¡£ function adjustPos(origPos, origRes, newRes) { var scaleFactor = newRes / origRes;
var adjustedPos = origPos * scaleFactor;
return adjustedPos;
}
µ÷Õû°Ù·Ö±È×ø±êµÄº¯Êý adjustPercent : - ¸Ãº¯Êý½ÓÊÜÔʼµÄ°Ù·Ö±È×ø±ê£¨
origX ºÍ origY £©¡¢Ôʼ·Ö±æÂÊ¿í¶ÈºÍ¸ß¶È¡¢ÒÔ¼°Ð·ֱæÂʵĿí¶ÈºÍ¸ß¶È¡£ - ËüÊ×ÏÈͨ¹ý
adjustPos º¯Êý¼ÆËãµ÷ÕûºóµÄ x ºÍ y ×ø±ê¡£ È»ºó£¬Ëü½«¼ÆËã³öµÄ×ø±êת»»»Ø¾ø¶Ô°Ù·Ö±È£¬µÃµ½Êµ¼ÊÔÚзֱæÂÊϵĵã»÷λÖᣠfunction adjustPercent(origX, origY, origWidth, origHeight, newWidth, newHeight) { 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];
}
ʾÀýʹÓò¿·Ö: - ¶¨ÒåÔʼµÄ°Ù·Ö±È×ø±êºÍ·Ö±æÂÊ¡£
ʹÓà adjustPercent º¯Êý¼ÆËãÔÚзֱæÂÊϵĵ÷Õû×ø±ê£¬²¢´òÓ¡³öÀ´¡£ var origX = 0.6076; var origY = 0.1885; var origWidth = 1080; var origHeight = 1920; var newWidth = 720; var newHeight = 1280; var [adjX, adjY] = adjustPercent(origX, origY, origWidth, origHeight, newWidth, newHeight); console.log(¡°µ÷ÕûºóµÄµã»÷λÖÃΪ: (¡° + adjX + ¡°, ¡° + adjY + ¡°)¡±);
×Ô¶¯µã»÷·½·¨ autoClick : - Õâ¸öº¯ÊýÊÇÒ»¸öռλ·û£¬ÓÃÓÚÖ´ÐÐʵ¼ÊµÄµã»÷²Ù×÷¡£
µ±Ç°µÄʵÏÖÖ»ÊǼòµ¥Êä³öµã»÷µÄλÖᣠfunction autoClick(xPercent, yPercent) { console.log("ÔÚÆÁÄ»Éϵã»÷: (" + xPercent + ", " + yPercent + ")");
}
µ÷ÓÃ×Ô¶¯µã»÷·½·¨:http://bbs.aiwork24.com/thread-125-1-1.html
Õâ¸ö´úÂëµÄÖ÷ҪĿµÄÔÚÓÚʹµÃÔÚ²»Í¬µÄÆÁÄ»·Ö±æÂÊÏ£¬µã»÷µÄÐÐΪÄܹ»±£³ÖÒ»Ö£¬´Ó¶øÌá¸ßÁËÔÚ²»Í¬É豸ÉϵÄÓû§ÌåÑé¡£ÄãÌáµ½µÄ auto.clickPercent(0.401, 0.2012) ÊÇÄã×Ô¼ºÊ¹Óõĵã»÷·½·¨£¬¿ÉÒÔÖ±½ÓÌæ»»×îºóÒ»ÐÐµÄ autoClick µ÷Óà |