function Нога(дл_отр_1, дл_отр_2, дл_отр_3, нач, кон, соотношение_углов) {
const расстояние = Math.sqrt((нач[0] - кон[0]) ** 2 + (нач[1] - кон[1]) ** 2);
let угол = 0, шаг = Math.PI * 2/3, ош = 1, ломаная;
let i = 0;
while (Math.abs(ош) > 1e-10) {
if (i++ > 50) { alert("Невозможно построить ногу."); return; }
const значения = [];
for (let сч = -1; сч <= 1; сч++) {
const
уг = угол + шаг * сч,
x_1 = Math.cos(уг) * дл_отр_1,
y_1 = Math.sin(уг) * дл_отр_1,
x_2 = дл_отр_2 - Math.cos((Math.PI + уг) * соотношение_углов - Math.PI) * дл_отр_3,
y_2 = -Math.sin((Math.PI + уг) * соотношение_углов - Math.PI) * дл_отр_3;
значения.push([
уг, Math.abs(Math.sqrt((x_1 - x_2) ** 2 + (y_1 - y_2) ** 2) - расстояние), [x_1, y_1], [x_2, y_2]
]);
}
ломаная = значения.reduce((пр, зн) => зн[1] < пр[1] ? зн : пр);
угол = ломаная[0], ош = ломаная[1];
шаг /= 2;
}
if (ломаная[2][1] < 0 && ломаная[3][1] > 0) {
ломаная[2][1] = -ломаная[2][1]; ломаная[3][1] = -ломаная[3][1];
}
ломаная.splice(0, 2), ломаная.splice(1, 0, [0, 0], [дл_отр_2, 0]);
const Вращение = (т, ц, sin, cos) => [
ц[0] + (т[0] - ц[0]) * cos - (т[1] - ц[1]) * sin,
ц[1] + (т[1] - ц[1]) * cos + (т[0] - ц[0]) * sin
];
const
разница_углов = Math.asin((ломаная[0][1] - ломаная[3][1]) / расстояние) - Math.asin((нач[1] - кон[1]) / расстояние),
sin_р = Math.sin(разница_углов), cos_р = Math.cos(разница_углов);
for (let сч = 0; сч < 3; сч++)
ломаная[сч] = Вращение(ломаная[сч], ломаная[3], sin_р, cos_р);
const сдвиг_x = ломаная[0][0] - нач[0], сдвиг_y = ломаная[0][1] - нач[1];
ломаная = ломаная.map(отр => (отр[0] -= сдвиг_x, отр[1] -= сдвиг_y, отр));
return ломаная;
}