Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 18.02.2020
Сообщений: 3

Точка и треугольник

18.02.2020, 10:55. Показов 1236. Ответов 1

Студворк — интернет-сервис помощи студентам
Дана матрица A размером 4x2

JavaScript
1
2
3
4
5
6
    A = [
        [x1, y1],
        [x2, y2],
        [x3, y3],
        [m1, n1]
    ]
На стандартной Декартовой системе координат [x1, y1], [x2, y2], [x3, y3] точками построен треугольник.
Нужно понять, находится ли точка [m1, n1] внутри него?

Например

JavaScript
1
2
3
4
5
6
    A = [
          [-2, -2],
          [3, 3],
          [3, -1],
          [4, 5]
    ]
Мы получим треугольник




Очевидно, что предмет в точке [4, 5] не находится внутри этого треугольника.

Надо написать функцию которая для заданной матрицы вернет true или false в зависимости от того находится ли точка [m1, n1] внутри или нет.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    function area(x) {
        return Math.abs((x[0][0] * (x[1][1] - x[2][1]) +
            x[1][0] * (x[2][1] - x[0][1]) +
            x[2][0] * (x[0][1] - x[1][1])) / 2);
    }
    
    
    function isInside(x) {
          let A = area(x[0][0], x[0][1], x[1][0], x[1][1], x[2][0], x[2][1]);
          let A1 = area(x[3][0], x[3][1], x[1][0], x[1][1], x[2][0], y[2][1]);
          let A2 = area(x[0][0], x[0][1], x[3][0], x[3][1], x[2][0], x[2][1]);
          let A3 = area(x[0][0], x[0][1], x[1][0], x[1][1], x[3][0], x[3][1]);
    
          return (A == A1 + A2 + A3);
    }
    
    console.log(isInside([[-2, -2], [3, 3], [3, -1],  [4, 5]]));   // false
    console.log(isInside([[-2, -2], [3, 3], [3, -1],  [2, 1]]));   // true 
    console.log(isInside([[5, -2],  [1, 5], [-5, -1], [0, 2]]));   // true 
    console.log(isInside([[5, -2],  [1, 5], [-5, -1], [0, 8]]));   // false
Помогите найти ошибку и решить задачу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2020, 10:55
Ответы с готовыми решениями:

Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у требуется написать программу определяющую попадает ли указанная точка в заданный треугольник
Треугольник задан координатами вершин х 1 у1 х 2 у 2 х 3 у 3 точка а задана координатами х у требуется написать программу определяющую...

Треугольник и точка
Задача С клавиатуры вводится координаты вершин треугольника и координаты точки с .Определить лежит ли точка в треугольнике.И если можно...

Треугольник и точка
При решении одной задачи мне пришлось заняться доказательством одного свойства треугольников. Поскольку я нигде ничего подобного не...

1
 Аватар для diadiavova
7261 / 2608 / 745
Регистрация: 11.04.2015
Сообщений: 4,155
Записей в блоге: 43
18.02.2020, 13:11
Цитата Сообщение от Stilius88 Посмотреть сообщение
Помогите найти ошибку и решить задачу.
Ошибок тут несколько. Во-первых, в функции area ты читаешь аргумент так, как будто это массив массивов, но при вызове функции передаешь ей шесть числовых аргументов. Во-второых, я так понимаю, ты пытался в этой функции реализовать формулу Герона, но это делается не так. В-третьих, в результате вычислений площади получаются с погрешностью, поэтому если их тупо сравнивать, то всегда будет false, вместо этого надо находить разность и сравнивать ее с какой-то небольшой величиной, например 1e-4. В обще и целом выглядеть это должно как-то так
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        function area(x)
        {
            let dist = (m, n) => Math.sqrt((m[0] - n[0]) ** 2 + (m[1] - n[1]) ** 2);
            let a = dist(x[0], x[1]), b = dist(x[0], x[2]), c = dist(x[1], x[2]);
            let p = (a + b + c) / 2;
            return Math.sqrt(p * (p - a) * (p - b) * (p - c));
        }
 
        function isInside(x)
        {
            let A = area(x.slice(0, 3));
            let A1 = area([x[0], x[1], x[3]]);
            let A2 = area([x[0], x[2], x[3]]);
            let A3 = area([x[1], x[2], x[3]]);
            return Math.abs(A - (A1 + A2 + A3)) < 1e-4 ;
        }
 
        console.log(isInside([[-2, -2], [3, 3], [3, -1], [4, 5]])); // false
        console.log(isInside([[-2, -2], [3, 3], [3, -1], [2, 1]])); // true
        console.log(isInside([[5, -2], [1, 5], [-5, -1], [0, 2]])); // true
        console.log(isInside([[5, -2], [1, 5], [-5, -1], [0, 8]])); // false
Добавлено через 6 минут
Ну и само собой, для точек, лежащих снаружи, но очень близко к сторонам треугольника можно получить результат такой, как будто они внутри, все из-за погрешности вычислений. Для более точных результатов этот вариант проверки может оказаться неподходящим, так что придется использовать или трассировку лучей или что там еще есть ))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2020, 13:11
Помогаю со студенческими работами здесь

Треугольник и точка.
Мне завтра сдавать лабораторну работу в универе, это последний день, а я приехал только сегодня из далека(ездил в гости за 300 км) День...

Точка и треугольник
Суть задачи определить попадает ли точка в треугольник, координаты точки и вершин треугольника задаются пользователем. не могу понять...

Точка и Треугольник
Даны действительные числа x1, x2, x3, y1, y2, y3. Принадлежит ли начало координат треугольнику с вершинами (x1, y1), (x2, y2), (x3, y3)?

Входит ли точка в треугольник?
как определить входит ли точка в правильный треугольник с известными координатами?

Точка, Линия, Треугольник
Здравствуйте! Делаю редактор чертежей. Имеется 3 класса: Точка, Линия, Треугольник (полигон). Все класы наследованы от абстрактного класса...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru