C/C++

Помогите реализовать алгоритм на С++

Тут вопрос больше в математической составляющей задачи. Один из варианов решения: можно попытаться найти такой эллиас, который проходит через данные 4 точки. Каких-либо универсальных теорем типа "через любые 5 точек можно построить эллипс" как в случае с окружностью не существует, поэтому придется строить исходя из общего уравнения эллипса в декартовой системе кооридинат:Вместо x и y по очереди подставляете координаты x1y1, x2y2, x3y3, x4y4. Получаете система из 4 уравнений и 6 неизвестых. Затем выражаете, например, A, B, C, D через переменные E и F. Если выражается - значит решение системы (и, соответстсвенно, такой эллипс) существует.
Можно ничего не выражать, достаточно каким-то образом найти хотя бы одно решение этой системы линейных уравнений. Загуглите конкрентые алгоритмы поиска решений СЛАУ,

Есть и другой вариант. Если повоображать и оперется на свою интуицию в геометрии, то я бы сказал, что для того, чтобы через 4 точки можно было провести эллипс, нужно, чтобы никакие 3 из них не лежали на одной прямой, и чтобы точки можно было соединить друг с другом отрезками таким образом, что образовывался бы выпуклый четырехугольник.
Дальнейшие рассуждения привели вот к чему. Нужно выбрать какие либо 3 точки, например x1y1, x2y2, x3y3 и соеденить их отрезками, получив треугольник. Далее проверить, лежит ли точка x4y4 внутри или на границе данного треугольника. Если лежит - то невозможно построить эллипс, если лежит за пределами данного треугольника - брать следующую тройку точек, например x1y1, x2y2, x4y4 и проверять, лежит ли внутри или на границе теругольника точка x3y3. Если ни в одном из случаев (всего 4 случая) не лежит внутри или на границе - построить эллипс возможно.
Задача определения принадлежности точки треугольнику решается следующим образом. Предположим, необходимо определить, лежит ли точка Q внутри или на границе треугольника ABC. Если S(ABC)==S(AQB)+S(BQC)+S(CQA), тогда лежит, иначе не лежит. Полщадь этих треугольников можно вычилсять по формуле Герона. Длины сторон треугольников - по формуле длины отрезка по его кооринатам концов.
Придется вычислять корень много раз, поэтому я думаю, что точности double может не хавтить, поэтому по возможности используйте библиотеку длинной арифметики. Естественно, сравнивать S(ABC) и S(AQB)+S(BQC)+S(CQA) через == нельзя ни в коем случае, потому что будет присутствовать погрешность из-за ограничений double, учтите это.
Евгений Омаров
Евгений Омаров
69 560
Лучший ответ
Разве не через любые 2 точки можно провести эллипс? Тогда ответ всегда да
Роман Щербатов
Роман Щербатов
12 733
Евгений Омаров обратите внимание, тут даны 4 точки x1y1 x2y2 x3y3 x4y4