В этом решении показано, как Вы можете позволить пользователю щелкнуть на пять точек, чтобы нарисовать конические сечения и указать их тип.
Напомню, что уравнение для конического сечения:
Если вы знаете координаты некоторых точек на коническом сечении, то вы можете подключить их координаты X и Y в это общее уравнение, чтобы получить систему уравнений с неизвестными значениями A, B, C, D, E и F.
Немного теории о способе решения:
Пользователь выбирает 5 точек на плоскости. Затем он подключает координаты X и Y точек к общему уравнению с F = 1, чтобы получить пять уравнений и пять неизвестных A, B, C, D и E. Затем он использует гауссово исключение для решения уравнений для A, B, C, D и E.
Из-за координат, используемых в PictureBox (в решении), этот пример имеет тенденцию создавать очень малые значения для большинства констант A, B, C, D и E. Крошечные значения вызывают некоторые проблемы при определении того, какой вид конического сечения представляет уравнение , Чтобы упростить работу со значениями, этот пример масштабирует результаты, поэтому наименьший коэффициент (по абсолютной величине) равен 1. (Та же логика, которая говорит, что вы можете произвольно установить F = 1, позволяет установить минимальный коэффициент равным 1.)
P.S. Этот метод по-прежнему не обрабатывает некоторые нечетные случаи. Например, если вы выберете пять точек с одинаковой координатой X, то исключение Гаусса не даст уникального решения. (Коническая часть будет вырожденным случаем прямой).
Другой необычный случай возникает, если уравнение конической секции должно иметь F = 0. Если F = 0, то шаг, который принимает F = 1, является недопустимым. У Вас все равно будет пять уравнений и пять неизвестных, но эта программа не решит уравнения в этом случае.
Для дополнительной теоретической части, советую обратиться - http://stratum.ac.ru/education/textbooks/kgrafic/additional/addit07.html
Проводник по программе:
- Запускаем программу
2. На плоскости указываем 5 точек
3. Для изменения точек Вы можете просто заново их указывать, приложение сотрёт старое решение и перепишет заново
В программе каждый метод и каждая функциональна строка имеет коментарий, что упростит Вам изучение и понятие кода в несколько раз быстрее.
Farrell_