Образуют ли координаты треугольник

Проверьте, можно ли сформировать прямоугольный треугольник, перемещая любую из координат

Даны три координаты треугольника (x1, y1) , (x2, y2) , (x3, y3) . Задача состоит в том, чтобы выяснить, можно ли преобразовать треугольник в прямоугольный , перемещая только одну точку точно на расстояние 1.
Если треугольник можно сделать прямоугольным , выведите «ВОЗМОЖНО» , иначе — «НЕ ВОЗМОЖНО» .

Если треугольник уже прямоугольный , об этом также следует сообщить.

Примеры:

Input:
x1 = -1, y1 = 0
x2 = 2, y2 = 0
x3 = 0, y3 = 1
Output: POSSIBLE

First co-ordinate (-1, 0) can be changed to (0, 0) and make it right-angled.
Input:
x1 = 36, y1 = 1
x2 = -17, y2 = -54
x3 = -19, y3 = 55
Output: POSSIBLE

Подходить:
Поскольку известно, что для треугольника сторон a , b и c треугольник будет прямоугольным, если выполняется следующее уравнение: a 2 + b 2 = c 2
Таким образом, для каждой координаты треугольника найдите все стороны и для 3 возможных перестановок их проверьте, является ли это уже прямоугольным треугольником, и сообщите об этом.

Если указанное выше условие не выполняется, то необходимо выполнить следующие операции:
Нам нужно изменить все координаты на 1 одну за другой и проверить, является ли это правильной комбинацией для прямоугольного треугольника.
Посмотрите, что может быть 4 возможных комбинации, чтобы изменить все координаты на 1. Это (-1, 0), (0, 1), (1, 0), (0, -1) . Поэтому запустите цикл и примените эти изменения по одному для каждой координаты и проверьте, что формула a 2 + b 2 = c 2 верна или нет.
Если это правда, то возможно преобразовать треугольник в прямоугольный треугольник, иначе нет.

Ниже приведена реализация приведенного выше кода:

// C ++ реализация
// вышеуказанный подход
#include

using namespace std;

// Храним все возможное
// изменения, чтобы сделать треугольник
// прямоугольный

// Функция проверки треугольника
// прямоугольный или нет

int ifRight( int x1, int y1,

int a = ((x1 — x2) * (x1 — x2))

int b = ((x1 — x3) * (x1 — x3))

int c = ((x2 — x3) * (x2 — x3))

if ((a == (b + c) && a != 0 && b != 0 && c != 0)

|| (b == (a + c) && a != 0 && b != 0 && c != 0)

|| (c == (a + b) && a != 0 && b != 0 && c != 0)) <

// Функция проверки треугольника
// можно преобразовать в прямоугольный

Решить треугольник Онлайн по координатам

1) длины и уравнения сторон, медиан, средних линий, высот, серединных перпендикуляров, биссектрис;

2) система линейных неравенств, определяющих треугольник;

2) уравнения прямых, проходящих через вершины параллельно противолежащим сторонам;

3) внутренние углы по теореме косинусов;

4) площадь треугольника;

5) точка пересечения медиан (центроид) и точки пересечения медиан со сторонами;

10) параметры вписанной и описанной окружностей и их уравнения.

Внимание! Этот сервис не работает в браузере IE (Internet Explorer).

Запишите координаты вершин треугольника и нажмите кнопку.

A ( ; ), B ( ; ), C ( ; )

Примечание: дробные числа записывайте
через точку, а не запятую.

Округлять до -го знака после запятой.

Определение принадлежности точки треугольнику

Дано: у нас есть треугольник, нам известны только координаты его вершин. У нас есть точка, нам известны её координаты.

Что нужно узнать: нужно установить принадлежность точки треугольнику.

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

Метод сравнения площадей

В данном методе сначала находятся площади 3-х треугольников, которые образует данная точка с каждой стороной треугольника. В нашем случае(рис. 1) это треугольники ABP, BCP, CAP и их площади s1, s2, s3 соответственно.

Затем находится площадь самого треугольника ABC.

Найденный площади сравниваются — если сумма 3-х площадей равна площади всего треугольника, то значит точка принадлежит треугольнику. При сравнении, как правило, задаётся погрешность.

Так как у нас известны только координаты точек, то все площади, находятся по формуле Герона, от обильности операций которой становится ясно, почему этот метод очень трудоёмкий.

Простейшая реализация алгоритма:

Атрибуты функции: aAx, aAy, aBx, aBy, aCx, aCy — координаты точек A, B, C треугольника; aPx, aPy — координаты точки, принадлежность которой надо определить.

Метод относительности

Данный метод заключается в следующем. Сначала выбирается ориентация движения по вершинам треугольника(по часовой или против часовой стрелке). Я выбираю по часовой. На рисунке 2 выбранная ориентация движения(по часовой) показана стрелками. По данной ориентации проходим все стороны треугольника, рассматривая их как прямые, и рассчитываем по какую сторону от текущей прямой лежит наша точка. Не трудно догадаться, что если точка для всех прямых, при нашей ориентации, лежит с правой стороны, то значит точка принадлежит треугольнику, а если хоть для какой-то прямой она лежит с левой стороны, то значит условие принадлежности не выполняется.

На рисунке 2 продемонстрирована ситуация, когда точка только для одной прямой AB лежит по левую сторону, а значит не принадлежит треугольнику.

Всё относительно!

Тут надо кое что пояснить, весьма не маловажное, что может сыграть роль в оптимизации и выборе алгоритма. Обратите внимание, что в приведённом коде есть закомментированные блоки кода с комментариями «для строгой ориентации», в то время как рабочий код универсален — он предназначен для любой ориентации. Т.е. представленный код определит принадлежность точки для любого заданного треугольника. В моей тестирующей программе треугольники как раз таки строятся по random()-у координат вершин, а ориентация идёт по вершинам(A>B>C>A). Для рисунка 2 — это по часовой стрелки, но для рисунка 3 — это против часовой.

Так вот, в случае рисунка 3 точка должна лежать по левую сторону векторов, чтобы принадлежать треугольнику.

Вот тут и получается важный момент! Если вы уверены, что в вашем проекте все треугольники будут ориентированы по часовой стрелке(а т.е. вершина C будет всегда правее вектора AB), то вам можно закомментировать блок универсального решения и раскомментировать блок «для строгой ориентации по часовой» и данный алгоритм упрощается аж на 3 логических операции!

Векторный метод

Третий метод который я освещаю для меня самый интересный.

Идея его применения зарождается если взглянуть на треугольник как на половинку параллелограмма…

Данный метод я сначала проверил на бумаге. После всех оптимизаций формул, как всё сошлось, я реализовал его в коде, где он показал себя вполне успешным и результативным. Аж эффективнее 2-х предыдущих методов :]

1) одну вершину треугольника помещаем в координаты (0;0);

2) две стороны, выходящие из этой вершины, представляем как вектора.

Таким образом из всего этого появляется система простых условий нахождения точки P между векторами b и c.(рис. 4)

Образуют ли координаты треугольник Рис. 4.

Поделиться или сохранить к себе: