- 要判断四个点是否构成正方形,可以转化为任意三个点是否构成等腰直角三角形。
- 判断等腰直角三角形的思路如下:
- 算出三个点之间的两两直线距离的平方,也即
; - 然后判断较小的两个值是否相等(等腰),以及较小的两个值之和是否等于第三个值(直角)。
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let T = undefined;
let point1 = Array(2), point2 = Array(2), point3 = Array(2), point4 = Array(2);
rl.on('line', function (line) {
if(T === undefined) {
T = parseInt(line);
point1[0] = undefined;
point1[1] = undefined;
point2[0] = undefined;
point2[1] = undefined;
point3[0] = undefined;
point3[1] = undefined;
point4[0] = undefined;
point4[1] = undefined;
return;
}
const tokens = line.split('');
if(point1[0] === undefined) {
point1[0] = parseInt(line[0]);
point2[0] = parseInt(line[1]);
point3[0] = parseInt(line[2]);
point4[0] = parseInt(line[3]);
return;
}
point1[1] = parseInt(line[0]);
point2[1] = parseInt(line[1]);
point3[1] = parseInt(line[2]);
point4[1] = parseInt(line[3]);
if(!judge(point1, point2, point3)) console.log("No");
else if(!judge(point1, point2, point4)) console.log("No");
else if(!judge(point1, point3, point4)) console.log("No");
else if(!judge(point2, point3, point4)) console.log("No");
else console.log("Yes");
if(--T === 0) rl.close()
else point1[0] = undefined;
});
// 判断三个点是否构成等腰直角三角形
let distance = [0, 0, 0];
function judge(point_1, point_2, point_3) {
distance[0] = Math.pow(point_1[0] - point_2[0], 2) + Math.pow(point_1[1] - point_2[1], 2);
distance[1] = Math.pow(point_1[0] - point_3[0], 2) + Math.pow(point_1[1] - point_3[1], 2);
distance[2] = Math.pow(point_2[0] - point_3[0], 2) + Math.pow(point_2[1] - point_3[1], 2);
distance.sort((a, b) => a - b);
if( distance[0] === distance[1] && distance[0] + distance[1] === distance[2]) {
return true;
} else return false;
}