Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.03.2022, 19:55
Новичок на форуме
Отправить личное сообщение для student_js29 Посмотреть профиль Найти все сообщения от student_js29
 
Регистрация: 23.11.2020
Сообщений: 3

Необходимо найти ошибку в цикле
Всем привет. У меня есть массив с координатами точек по которым строятся прямые. По заданию мне нужно найти точки пересечения этих прямых. Если в массиве у меня координаты только двух прямых, все работает правильно, точка пересечения находится. Но когда я добавляю новые значения, мой цикл перестает работать, не переходит к новым значениям. Смысл заключается в том, что берется 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}`)
}
Ответить с цитированием
  #2 (permalink)  
Старый 30.03.2022, 20:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

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']);
и далее
Ответить с цитированием
  #3 (permalink)  
Старый 30.03.2022, 20:27
Новичок на форуме
Отправить личное сообщение для student_js29 Посмотреть профиль Найти все сообщения от student_js29
 
Регистрация: 23.11.2020
Сообщений: 3

Не совсем понимаю какой смысл заменять числами, если для этого и писался цикл. Но в любом случае такой вариант не сработал, дальше двух первых элементов цикл не прошел
Ответить с цитированием
  #4 (permalink)  
Старый 30.03.2022, 20:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

student_js29,
цикл нужен только для элементов массива sgts !!!
Сообщение от student_js29
что берется sgts[0] сравнивается с sgts[1]
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']);

        }
        }



а у вас неизвестно что циклится.
Ответить с цитированием
  #5 (permalink)  
Старый 30.03.2022, 21:48
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

пересечение отрезков
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>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите найти ошибку в коде AndriiS Общие вопросы Javascript 7 10.11.2018 17:28
jQuery ajax - помогите найти ошибку malefikus13 Общие вопросы Javascript 9 12.08.2015 13:36
Помогите найти ошибку в вёрстке OlegALL (X)HTML/CSS 1 03.02.2014 11:58
Помогите найти ошибку в простом скрипет Mekasan Общие вопросы Javascript 3 05.08.2013 12:02
Необходимо найти и исправить ошибку в CSS/Javascript javascript_pupil Работа 1 02.05.2011 15:41