/**
*
* @param {Number} number 循环次数
* @param {Array} poi1
* @param {Array} poi2
* @param {Array} poi3
* @param {Array} poi4
* @param {Array} map1
* @param {Array} map2
* @param {Array} map3
* @param {Array} map4
* @param {Array} paraAr
* @returns 二次步进一半得到三参
*/
function toHalf(
number,
poi1,
poi2,
poi3,
poi4,
map1,
map2,
map3,
map4,
paraAr
) {
let offsetHalf1 = getDisOffset(poi1, map1);
offsetHalf1 = [offsetHalf1[0] / 2, offsetHalf1[1] / 2];
// 得到p1平移一半距离的新点
let p1sHalf = getOffsetPoint(offsetHalf1, poi1); //
let p2sHalf = getOffsetPoint(offsetHalf1, poi2);
// 得到3参和旋转原点
let obj3 = getBasefromLine([poi1, poi2, p1sHalf, p2sHalf], p1sHalf);
paraAr.push({
...obj3,
o: p1sHalf,
});
//得到入口点转换后的点
poi1 = getPoint(paraAr[paraAr.length - 1], poi1, paraAr[paraAr.length - 1].o);
poi2 = getPoint(paraAr[paraAr.length - 1], poi2, paraAr[paraAr.length - 1].o);
poi3 = getPoint(paraAr[paraAr.length - 1], poi3, paraAr[paraAr.length - 1].o);
poi4 = getPoint(paraAr[paraAr.length - 1], poi4, paraAr[paraAr.length - 1].o);
console.log("这是转换后最终的4点", poi1, poi2, poi3, poi4); //这是转换后最终的4点
return loop(++number, poi1, poi2, poi3, poi4, map1, map2, map3, map4, paraAr);
}
/**
*
* @param {Number} num 循环次数,为5就4个点转一圈
* @param {Array} p1 图片参考点
* @param {Array} p2
* @param {Array} p3
* @param {Array} p4
* @param {Array} m1 图片参考点对应的地图真实经纬度
* @param {Array} m2
* @param {Array} m3
* @param {Array} m4
* @param {Array} paraArray 三参数组
* @returns 得到转换后的点 和三参进数组
*/
function loop(num, p1, p2, p3, p4, m1, m2, m3, m4, paraArray) {
console.log("入口循环次数", num);
if (num === 1) {
console.log("if[1]循环次数", num);
// 得到映射点
const pxy1 = getPoint(paraArray[0], p1, paraArray[0].o);
const pxy2 = getPoint(paraArray[0], p2, paraArray[0].o);
const pxy3 = getPoint(paraArray[0], p3, paraArray[0].o);
const pxy4 = getPoint(paraArray[0], p4, paraArray[0].o);
return loop(++num, pxy1, pxy2, pxy3, pxy4, m1, m2, m3, m4, paraArray);
} else if (num > 5) {
console.log("if[6/6+]循环次数", num, "\n\t");
return [p1, p2, p3, p4]; // 返回值这里无效,改成return 3,也是返回undefined
} else {
if ((num - 2) % 4 === 0) {
console.log("if[2+4n]循环次数", num);
if (num !== 2) {
[p1, p3] = [p3, p1]; // 把上一循环参数的一三互换
[p2, p4] = [p4, p2]; // 把上一循环参数的二四互换
[m1, m3] = [m3, m1]; // 把上一循环参数的五七互换
[m2, m4] = [m4, m2]; // 把上一循环参数的六八互换
// console.log("转2,n !== 2 ", p1, p2, p3, p4, m1, m2, m3, m4);
}
// console.log("转2", p1, p2, p3, p4, m1, m2, m3, m4);
toHalf(num, p2, p1, p4, p3, m2, m1, m4, m3, paraArray);
}
if ((num - 3) % 4 === 0) {
console.log("if[3+4n]循环次数", num);
[p1, p2] = [p2, p1]; // 把上一循环参数的一二互换
[p3, p4] = [p4, p3]; // 把上一循环参数的三四互换
[m1, m2] = [m2, m1]; // 把上一循环参数的五六互换
[m3, m4] = [m4, m3]; // 把上一循环参数的七八互换还原
// console.log("转3", p1, p2, p3, p4, m1, m2, m3, m4);
toHalf(num, p4, p3, p2, p1, m4, m3, m2, m1, paraArray);
}
if ((num - 4) % 4 === 0) {
console.log("if[4+4n]循环次数", num);
[p1, p4] = [p4, p1]; // 把上一循环参数的一四互换
[p2, p3] = [p3, p2]; // 把上一循环参数的二三互换
[m1, m4] = [m4, m1]; // 把上一循环参数的五八互换
[m2, m3] = [m3, m2]; // 把上一循环参数的六七互换还原
// console.log("转4", p1, p2, p3, p4, m1, m2, m3, m4);
toHalf(num, p1, p2, p3, p4, m1, m2, m3, m4, paraArray);
}
if ((num - 5) % 4 === 0) {
console.log("if[5+4n]循环次数", num);
// console.log("第4个坐标p3'", p3, "m3", m3);
toHalf(num, p3, p4, p1, p2, m3, m4, m1, m2, paraArray);
}
}
}
const res = loop(
1,
picThree,
picFour,
picFive,
picSix,
mapThree,
mapFour,
mapFive,
mapSix,
paraArr
);
console.log(res); // 是undefined,为什么不是别的
loop函数中调用toHalf时,前面增加return 关键字。
