
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, учтите это.

Можно ничего не выражать, достаточно каким-то образом найти хотя бы одно решение этой системы линейных уравнений. Загуглите конкрентые алгоритмы поиска решений СЛАУ,
Есть и другой вариант. Если повоображать и оперется на свою интуицию в геометрии, то я бы сказал, что для того, чтобы через 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, учтите это.
Разве не через любые 2 точки можно провести эллипс? Тогда ответ всегда да
Евгений Омаров
обратите внимание, тут даны 4 точки x1y1 x2y2 x3y3 x4y4
Похожие вопросы
- Помогите ускорить алгоритм
- Помогите составить алгоритм вычисления функции:
- Помогите решить алгоритм на с++
- Помогите написать алгоритм с++
- С++ Нет идей как можно реализовать. Даже не понятно как алгоритм должен работать.
- Напишите алгоритм подсчета цифр. Помогите.
- Алгоритмы. Бинарная сортировка
- На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
- С++, реализовать код с помощью функции, помогите пожалуйста, очень нужно
- Помогите пожалуйста написать программу, реализующую десять генераторов псевдослучайных чисел.СИ!!!!