https://cmd.0k.gs/end
这个是我的思路:根据2次投掷方向,通过三角函数,最后算出大概的位置
核心代码(已经过GPT优化),如有不对还请指出
function calculatePortalPosition(data) {
let angleToRadians = (degrees) => (degrees * Math.PI) / 180; // js要算出斜率
let positions = data.map(({ player, fac }) => {
let x = player[0];
let z = player[1];
let adjustedAngle = (fac - 90 + 360) % 360; // 把mc的fac转换为数学坐标系里的度数
let angle = angleToRadians(adjustedAngle); // 转换斜率
let directionX = Math.cos(angle); // 老三角函数了,cos sin
let directionZ = Math.sin(angle);
return { x, z, directionX, directionZ };
});
let distanceBetweenThrows = Math.sqrt( // 找焦点
Math.pow(positions[1].x - positions[0].x, 2) +
Math.pow(positions[1].z - positions[0].z, 2)
);
let extensionFactor = 2; // 自动调节延长距离,增加精度(GPT帮忙写的这部分)
let dynamicDistance = Math.max(distanceBetweenThrows * extensionFactor, 1000);
let portalX = (positions[0].x + positions[1].x) / 2 - (positions[0].directionX + positions[1].directionX) * dynamicDistance; // 最后,求坐标!
let portalZ = (positions[0].z + positions[1].z) / 2 - (positions[0].directionZ + positions[1].directionZ) * dynamicDistance;
return {
x: Math.round(portalX),
z: Math.round(portalZ)
};
}