Необходимо найти ошибку в цикле
Всем привет. У меня есть массив с координатами точек по которым строятся прямые. По заданию мне нужно найти точки пересечения этих прямых. Если в массиве у меня координаты только двух прямых, все работает правильно, точка пересечения находится. Но когда я добавляю новые значения, мой цикл перестает работать, не переходит к новым значениям. Смысл заключается в том, что берется sgts[0] сравнивается с sgts[1] и выводится точка пересечения, дальше должен sgts[0] с sgts[2] и на этом моменте ничего не происходит. Буду благодарен за помощь
sgts = [[{x:1, y:2}, {x:-3, y:1}],[{x:-3, y:5}, {x:1, y:4}],[{x:4, y:2}, {x:-1, y:2}],[{x:-2, y:5}, {x:4, y:1}]]; let x = 0; y = 0; total = 0; xt = 0; yt = 0; total1 = 0; for(let i = 0; i < sgts.length - 1; i++) { for (let j = i + 1; j < sgts[i].length; j++) { x = (sgts[i][i]['y'] - sgts[i][j]['y']); y = (sgts[i][j]['x'] - sgts[i][i]['x']); total = -(sgts[i][i]['x'] * sgts[i][j]['y'] - sgts[i][j]['x'] * sgts[i][i]['y']); xt = (sgts[j][j]['y'] - sgts[j][i]['y']); yt = (sgts[j][i]['x'] - sgts[j][j]['x']); total1 = -(sgts[j][j]['x'] * sgts[j][i]['y'] - sgts[j][i]['x'] * sgts[j][j]['y']); console.log(`X: ${x}`) console.log(`Y: ${y}`) console.log(`Total: ${total}`) console.log('/') console.log(`XT: ${xt}`) console.log(`YT: ${yt}`) console.log(`Total1: ${total1}`) solver1(); } } function solver1() { var ytotal = (x * total1 - total * xt) / (x * yt - y * xt) var xtotal = (total * yt - y * total1) / (x * yt - y * xt) console.log('/') console.log(`X : ${xtotal}`) console.log(`Y : ${ytotal}`) } |
student_js29,
должно быть как то так ... for (let j = i + 1; j < sgts.length; j++) { x = (sgts[i][0]['y'] - sgts[j][0]['y']); y = (sgts[i][0]['x'] - sgts[j][0]['x']);и далее |
Не совсем понимаю какой смысл заменять числами, если для этого и писался цикл. Но в любом случае такой вариант не сработал, дальше двух первых элементов цикл не прошел
|
student_js29,
цикл нужен только для элементов массива sgts !!! Цитата:
for(let i = 0; i < sgts.length - 1; i++) { let a = sgts[i]; for (let j = i + 1; j < sgts.length; j++) { let b = sgts[j]; //пишите далее используя a и b // тут ваши вычисления типа x = a[0]['y'] - b[0]['y'] ... xt = a[1]['y'] - b[1]['y']); } } а у вас неизвестно что циклится. |
пересечение отрезков
student_js29,
<script> sgts = [ [{ x: 1, y: 2 }, { x: -3, y: 1 }], [{ x: -3, y: 5 }, { x: 1, y: 4 }], [{ x: 4, y: 2 }, { x: -1, y: 2 }], [{ x: -2, y: 5 }, { x: 4, y: 1 }] ]; for (let i = 0; i < sgts.length - 1; i++) { let a = arrValue(sgts[i]); for (let j = i + 1; j < sgts.length; j++) { let b = arrValue(sgts[j]); let point = Intersection(...a, ...b); if (point) document.write(`отрезок ${i} пересекается с отрезком ${j} в точке x : ${point.x.toFixed(1)}, y : ${point.y.toFixed(1)}<br>`) } } function arrValue(arr) { return [arr[0].x, arr[0].y, arr[1].x, arr[1].y] } function Intersection(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) { let v1 = (bx2 - bx1) * (ay1 - by1) - (by2 - by1) * (ax1 - bx1), v2 = (bx2 - bx1) * (ay2 - by1) - (by2 - by1) * (ax2 - bx1), v3 = (ax2 - ax1) * (by1 - ay1) - (ay2 - ay1) * (bx1 - ax1), v4 = (ax2 - ax1) * (by2 - ay1) - (ay2 - ay1) * (bx2 - ax1), x = ((ax1 * ay2 - ax2 * ay1) * (bx2 - bx1) - (bx1 * by2 - bx2 * by1) * (ax2 - ax1)) / ((ay1 - ay2) * (bx2 - bx1) - (by1 - by2) * (ax2 - ax1)), y = ((by1 - by2) * x - (bx1 * by2 - bx2 * by1)) / (bx2 - bx1); return (v1 * v2 < 0) && (v3 * v4 < 0) && { x: -x, y: y }; } </script> |
Часовой пояс GMT +3, время: 05:15. |