Какой треугольник не существует
Перейти к содержимому

Какой треугольник не существует

  • автор:

Проверка что созданный треугольник существует и не является дегенеративным

Здраствуйте, код по проверки дегенеративности есть, но если может кто подсказать если верно сделан или если есть другие варианты, а то вроде код есть а проверку дегенеративность не проходит))).

public Triangle(Point a, Point b, Point c) < if ((length1 

тут какбы должен пройти проверку но ничего не случается.

double length1(Point a, Point b) < double xDistanceSquare = Math.pow(a.getX() - b.getX(), 2); double yDistanceSquare = Math.pow(a.getY() - b.getY(), 2); return Math.sqrt(xDistanceSquare + yDistanceSquare); >double length2(Point a, Point c) < double xDistanceSquare = Math.pow(a.getX() - c.getX(), 2); double yDistanceSquare = Math.pow(a.getY() - c.getY(), 2); return Math.sqrt(xDistanceSquare + yDistanceSquare); >double length3(Point c, Point b)

Отслеживать
49k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 20 сен 2021 в 5:10
user461637 user461637

Напишите лучше расчёт площади (оно и само по себе пригодится), и по результату смотрите, дегенерат попался или нет. Раз даны три длины - то по Герону.

20 сен 2021 в 5:47
По-русски такие треугольники называются «вырожденными»
20 сен 2021 в 5:56

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Раз вам даны точки, то треугольник, конечно, существует, а вырожденность можно проверить, узнав, лежат ли точки на одной прямой
(собственно, через векторное произведение считается удвоенная площадь, как Akina уже отметил, только с координатами Герон не нужен)

public Triangle(Point a, Point b, Point c) < if ((a.getX()-b.getX())*(c.getY()-b.getY())-(a.getY()-b.getY())*(c.getX()-b.getX())==0) throw new IllegalArgumentException("Triangle is degenerative"); 

Если координаты внутри Point у вас не целые, то сравнивайте абсолютное значение указанного выражения с малой величиной (скажем, 1.0e-10 )

Что за треугольник?

Напишите функцию triangle , которая тестирует переданный ей треугольник и возвращает его тип. Треугольники бывают: остроугольными, прямоугольными и тупоугольными. Функция принимает три числа, которые соответствуют длине каждой стороны.

triangle(2, 4, 6); // Не существует triangle(7, 3, 2); // Не существует triangle(8, 5, 7); // Остроугольный triangle(3, 4, 5); // Прямоугольный triangle(7, 12, 8); // Тупоугольный

Решение

Чтобы решить задачу придётся вспомнить немного школьной геометрии. Начнём с простого: треугольник не существует, если сумма длины двух любых его сторон меньше, либо равен длине третьей стороны:

var triangle = function(a, b, c)  if (a + b  c || a + c  b || b + c  a)  return 'Треугольник не существует'; > >;

Условие выглядит громоздким и трудным для чтения. Его можно немного упростить с помощью методов массивов sort : если отсортировать аргументы по возрастанию, то мы точно будем знать, что на последнем месте будет находиться сторона с наибольшей длиной:

var triangle = function()  var args = [].sort.call(arguments); if (args[0] + args[1]  args[2])  return 'Треугольник не существует'; > >;

Недостаток данного способа заключается в том, что функция будет обрабатывать все передаваемы ей аргументы, а не только первые три. Эту проблему достаточно просто решить с помощью метода массивов slice :

var triangle = function()  var args = [].slice.call(arguments, 0, 3).sort(); if (args[0] + args[1]  args[2])  return 'Треугольник не существует'; > >;

Данное дейтвие также приведёт к преобразованию псевдомассива arguments к массиву, поэтому можно сразу же воспользоваться методом sort .

Итак, что мы уже имеем? Отсортированный по возрастанию массив аргументов и вывод о том, что треугольника не существует. Задача практически решена. Остаётся только сравнивать квадраты длин сторон в соотвествие с правилами:

  1. Если квадраты двух меньших сторон равны квадрату третьей стороны, то треугольник прямогульный.
  2. Если меньше, то — треугольник тупоугольный.
  3. Если больше, то — треугольник остроугольный.
var triangle = function()  var sides = [].slice.call(arguments, 0, 3).sort(); if (sides[0] + sides[1]  sides[2])  return 'Треугольник не существует'; > var sum = (Math.pow(sides[0], 2) + Math.pow(sides[1], 2)).toFixed(2); var side = Math.pow(sides[2], 2).toFixed(2); if (sum === side)  return 'Треугольник прямоугольный'; > if (sum  side)  return 'Треугольник тупоугольный'; > if (sum > side)  return 'Треугольник остроугольный'; > >;
console.log(triangle(2, 4, 6)); // Не существует console.log(triangle(7, 3, 2)); // Не существует console.log(triangle(8, 5, 7)); // Остроугольный console.log(triangle(3, 4, 5)); // Прямоугольный console.log(triangle(7, 12, 8)); // Тупоугольный
const triangle = (. args) =>  const sides = args.slice(0, 3).sort(); if (sides[0] + sides[1]  sides[2])  return 'Треугольник не существует'; > const sum = (Math.pow(sides[0], 2) + Math.pow(sides[1], 2)).toFixed(2); const side = Math.pow(sides[2], 2).toFixed(2); if (sum === side)  return 'Треугольник прямоугольный'; > if (sum  side)  return 'Треугольник тупоугольный'; > if (sum > side)  return 'Треугольник остроугольный'; > >;

Существование треугольника Шарыгина — это настоящее математическое чудо

Сегодня я хочу рассказать об удивительном геометрическом объекте, впервые рассмотренным советским математиком Игорем Федоровичем Шарыгиным.

Оригинал задачи (доступно через WebArchive) - здесь

Для начала посмотрите на рисунок ниже. Что Вы на нём видите?

Объясняю: слева заштрихован треугольник, вершины которого образованы основаниями медиан (делят сторону пополам), а справа - основаниями высот. Если большие треугольники не являются равнобедренными, то и заштрихованные равнобедренными быть не могут, это доказанный факт.

И тут становится интересно! Оказывается, и это показал Игорь Федорович, полученный из биссектрис треугольник может быть равнобедренным! Более того, есть одно очень тонкое условие: угол такого треугольника должен попадать в диапазон от 102,663 до 104,478 градусов!

Откуда такие странные цифры?

Дальнейшие разборки - дело для настоящих ценителей вкуса. Итак, мы предположим, что треугольник, показанный синим цветом на рисунке выше, является равнобедренным. Геометрическая часть доказательства сводится к поиску подобных треугольников и в итоге приводит к следующему выражению:

Геометрическое решение в силу сложности я опускаю. Очень подробно расписано - здесь

Затем это выражение раскрывается, а в пару к нему записывается теорема косинусов для большого треугольника:

Начинаем страдать! Нам нужно понять, что за условия накладываются на переменную х. Заметим абсолютную симметричность левой части выражения (9 слагаемых, полученных перемножением друг друга + 1 произведение сторон) и путём подбора получим:

Последним записано неравенство треугольника

Теперь решаем уравнение и неравенство совместно:

Получили первое условие. Не пугайтесь, ведь x - в нашем случае это косинус угла, поэтому всё нормально. Идём дальше. подставляем выражение для стороны a в теорему косинусов:

Получили квадратное уравнение относительно y. Необходимо проверить, когда оно имеет решение, причём положительные (ведь y - это отношение сторон треугольника). Разделим на (4x+1), вычислим дискриминант и получим итоговое выражение для косинуса угла х:

Здесь нужно подобрать корни кубических уравнений, а потом поделить уголком, чтобы получить неравенство, решаемое школьным методом интервалов

Итак, барабанная дробь! Мы получили, что косинус одного из углов треугольника Шарыгина должен быть больше минус 1/4 и меньше вот этого вот всего с радикалом. Вычисляем на калькуляторе:

А вот и реальные углы! Оцените полученный диапазон! Не знаю как Вы, но я испытал истинное наслаждение.

Уравнение можно решить как квадратное относительно y, а затем перебором найти целочисленные решения. Получено оно из предположения, что z=1 (следует из свойств симметрии решений).

И еще один факт. Выше показан треугольник Шарыгина с наименьшими целочисленными сторонами. Красивый конец, неправда ли ?

  • Больше математики в Telegram - "Математика не для всех".

Эта статья поддерживается командой ITGLOBAL.COM

Мы — первый облачный провайдер в России, а также интегратор, поставщик ИТ-услуг, продуктов, сервисов и разработчик собственного ПО.

Наш сайт
Наш блог про Enterprise IT во всех его проявлениях
Истории успеха наших клиентов

  • Блог компании ГК ITGLOBAL.COM
  • Математика
  • Научно-популярное

какой треугольник не существует: прямоугольный треугольник со сторонами 5 см, 9 см, 13 см ; равносторонний треугольник

; равносторонний треугольник со сторонами 11 см, треугольник со сторонами 2см, 5 см, 8 см.

Голосование за лучший ответ

прямоугольный треугольник со сторонами 5см 9см и 13см не существует

прямоугольного треугольника со сторонами 5 см, 9 см, 13 см (гипотенуза должна быть больше катета) и треугольника со сторонами 2 см, 5 см, 8см ( одна сторона треугольника должна быть меньше суммы двух других сторон) - не существует)))

Не существует прямоугольный треугольник со сторонами 5 см, 9 см, 13 см (сумма квадратов катетов меньше квадрата гипотенузы, а потому треугольник не может быть прямоугольным) и треугольник со сторонами 2 см, 5 см, 8 см (такого треугольника в принципе быть не может, т. к. сумма двух сторон 2+5 меньше третьей стороны 8).

Похожие вопросы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *